我在SQL
中运行了以下查询declare @h nvarchar(max)
declare @i int
set @i =1
declare @two nvarchar(max)
select @h = 'set @two = (select word from #LocalTempTable where Idcolumn =' + cast(@i as nvarchar(max)) +')'
exec(@h)
print @two
我收到以下错误
Msg 137, Level 15, State 1, Line 1
Must declare the scalar variable "@two".
为什么会这样?
答案 0 :(得分:2)
您的变量范围存在问题,@ h变量中的@two
未声明。
您可以在@h变量中声明它:
DECLARE @h nvarchar(max)
,@i INT = 1
SELECT @h = 'declare @two nvarchar(max) set @two = (select ''dog' + CAST(@i as nvarchar(max)) +''')'
EXEC(@h)
你的#temp表仍然存在范围问题,并在内部声明它使其在外部不可用,因此没有太多指向它。
答案 1 :(得分:2)
以下是更正后的内容。这是sqlfiddle。
declare @h nvarchar(max)
declare @i int
set @i =1
declare @two nvarchar(max)
select @h = 'select @to = word from #LocalTempTable where Idcolumn =' + cast(@i as nvarchar(max))
exec sp_executesql @h, N'@to nvarchar(max) output', @to=@two output
print @two