В SQL Server 2008 я пытаюсь быстро получить количество строк в таблице для диагностических целей в хранимой процедуре. В хранимой процедуре я использую следующий SQL для подсчета без сканирования таблицы:
--Get row count using sp_spaceused
DECLARE @rowCount AS INT
DECLARE @spaceUsed TABLE(
[Name] varchar(64),
[Rows] INT,
[Reserved] VARCHAR(50),
[Data] VARCHAR(50),
[Index_Size] VARCHAR(50),
[Unused] VARCHAR(50)
)
INSERT INTO @spaceUsed EXEC sp_spaceused 'MyTable'
SET @rowCount = (SELECT TOP 1 [Rows] FROM @spaceUsed)
Этот SQL работает нормально, когда я выполняю хранимую процедуру из SQL Management Studio, используя учетную запись администратора. Однако, когда я пытаюсь выполнить хранимую процедуру из кода (который использует другой логин), sp_spaceused
завершается неудачно с сообщением «Объект« MyTable »не существует в базе данных« MyDatabase »или недопустим для этой операции».
Есть ли способ заставить это работать для входа без прав администратора? Есть ли что-то еще, что я пропускаю при запуске процедуры в Management Studio по сравнению с кодом?