2011-08-05 52 views
0

我有下面的代碼,我想通過動態SQL獲取一行的id。將動態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) 

我得到的錯誤:

Must declare the scalar variable "@id".

+0

有困難張貼代碼,不知道該標籤的使用。替換@與[在] 固定這樣的: 聲明[在] ParmDefinition爲nvarchar(250) 組[在] ParmDefinition = '[在] bannerid int的列' 組[在] SQL ='SELECT TOP 1 [ at] bannerid = id FROM banner WHERE發佈日期 GETDATE()'+ [at]擁有+ at] ParmDefinition,[at] bannerid out 謝謝! – Flo

回答

2

您的代碼不表明你設置你的@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,@[email protected] output 'on this line I get the error 

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

嘗試

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

EXEC sp_executesql @SQL, @params, @[email protected] output 

我相信這是正確的語法。

2

我可能會錯過一些東西,但我看不到你在哪裏聲明@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,@[email protected] output 'on this line I get the error 

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