Назначить вывод динамического SQL переменной (без сохраненного процесса) - PullRequest
0 голосов
/ 05 августа 2011

У меня есть код ниже, где я хочу получить идентификатор строки с помощью динамического SQL.

Обратите внимание, что переменные @posselect и @catselect заполнены, но я оставил это для обзора.

declare @SQL nvarchar(1000)
declare @posselect nvarchar(50)
declare @catselect nvarchar(100)

declare @bannerid int

SET @SQL = 'SELECT TOP 1 @id = id FROM banners
            WHERE publishdate < GETDATE() 
            AND depublishdate > GETDATE()' + @posselect + @catselect + 
           'ORDER BY [views] ASC'

EXEC sp_executesql @SQL, @bannerid = @id output  'on this line I get the error

print '@bannerid:'+STR(@bannerid)

Я получаю сообщение об ошибке:

Необходимо объявить скалярную переменную "@id".

Ответы [ 3 ]

2 голосов
/ 05 августа 2011

Возможно, я что-то упускаю, но не вижу, где вы объявляете @id (как следует из сообщения об ошибке).

Попробуйте изменить это на:

declare @SQL nvarchar(1000) declare @posselect nvarchar(50) declare @catselect nvarchar(100)

declare @bannerid int
declare @id int

set @SQL='SELECT TOP 1 @id=id FROM banners WHERE publishdateGETDATE()' + @posselect + @catselect + ' ORDER BY [views] asc'

EXEC sp_executesql @SQL,@bannerid=@id output 'on this line I get the error

print '@bannerid:'+STR(@bannerid)
2 голосов
/ 05 августа 2011

Ваш код не показывает, что вы устанавливаете свое поле @id

declare @SQL nvarchar(1000)
declare @posselect nvarchar(50)
declare @catselect nvarchar(100)

declare @id int
declare @bannerid int

set @SQL='SELECT TOP 1 @id=id FROM banners
WHERE publishdate<GETDATE() AND depublishdate>GETDATE()' + @posselect + @catselect + '
ORDER BY [views] asc'

EXEC sp_executesql @SQL,@bannerid=@id output  'on this line I get the error

print '@bannerid:'+STR(@bannerid)
1 голос
/ 05 августа 2011

Попробуйте

DECLARE @params NVARCHAR(128) = N'@id int output';

EXEC sp_executesql @SQL, @params, @id=@bannerid output   

Я считаю, что это правильный синтаксис.

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