2009-11-05 64 views
1

爲什麼這段代碼不適合我?它給出了錯誤Must declare the scalar variable "@y".構建SQL字符串的問題

DECLARE @y int 
DECLARE @dbname VARCHAR(50) 

SET @y = -1 
SET @dbname = 'SomeDb.dbo.' 

SET @sql = 'SELECT @y=1 from ' + @dbname + 'Respondent' 

exec(@sql) 

回答

8

exec函數創建一個新的執行範圍。你的@y變量在那裏不存在。

改爲使用sp_executesql。請注意,您仍然需要做一些額外的工作來將變量傳遞給函數邊界。

DECLARE @IntVariable int; 
DECLARE @SQLString nvarchar(500); 
DECLARE @ParmDefinition nvarchar(500); 
DECLARE @max_title varchar(30); 

SET @IntVariable = 197; 
SET @SQLString = N'SELECT @max_titleOUT = max(Title) 
    FROM AdventureWorks.HumanResources.Employee 
    WHERE ManagerID = @level'; 
SET @ParmDefinition = N'@level tinyint, @max_titleOUT varchar(30) OUTPUT'; 

EXECUTE sp_executesql @SQLString, @ParmDefinition, @level = @IntVariable, @[email protected]_title OUTPUT; 
SELECT @max_title;