TSQL: как заполнить переменную, используя сгенерированную строку команды sql без курсора - PullRequest
4 голосов
/ 24 октября 2008

Я пытаюсь получить значение сгенерированного sql внутри хранимой процедуры.
Выполнение этого

   DECLARE @sSQL varchar(5000), @retval int
   DECLARE @tablename varchar(50)

   SELECT @tablename = 'products'

   SELECT @sSQL = 'SELECT @retval = MAX(ID)'
   SELECT @sSQL = @sSQL + ' FROM ' + @tablename
   EXEC (@sSQL) 

   SELECT @retval

Я получаю

   Must declare the variable '@retval'.

Как я могу получить значение без использования курсора (чего я пытаюсь избежать)?

1 Ответ

10 голосов
/ 24 октября 2008

Вам нужно будет использовать sp_executesql:

DECLARE @retval int   
DECLARE @sSQL nvarchar(500);
DECLARE @ParmDefinition nvarchar(500);

DECLARE @tablename nvarchar(50)  
SELECT @tablename = N'products'  

SELECT @sSQL = N'SELECT @retvalOUT = MAX(ID) FROM ' + @tablename;  
SET @ParmDefinition = N'@retvalOUT int OUTPUT';

EXEC sp_executesql @sSQL, @ParmDefinition, @retvalOUT=@retval OUTPUT;

SELECT @retval;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...