sql server中的变量问题
Posted
技术标签:
【中文标题】sql server中的变量问题【英文标题】:Issue with the variables in sql server 【发布时间】:2017-08-31 06:17:43 【问题描述】:Declare @week1 varchar(max)='value 1'
Declare @week2 varchar(max)='value 2'
declare @sql varchar(max)
declare @i int=1
while(@i<=2)
begin
set @sql='print @week'+cast(@i as varchar(6))+''
exec(@sql)
set @i=@i+1
end
执行此操作后,我收到错误消息:
Msg 137, Level 15, State 2, Line 2 必须声明标量变量 “@week1”。 Msg 137, Level 15, State 2, Line 2 必须声明标量 变量“@week2”。
【问题讨论】:
看看here 执行的SQL不包含第1周或第2周的声明。 我需要打印@week1 和很快的值 我觉得你的变量个数是固定的,可以用CASE WHEN
打印出来。
【参考方案1】:
这是范围问题。除非您在动态 sql 中声明它们,否则您不能从动态 sql 中访问变量。如果您将 EXEC (@sql) 更改为 print(@sql),您会看到您要执行的内容是这样的……
print @week1
print @week2
如果您正在寻找以下结果...
value 1
value 2
...然后尝试将您的代码更改为此...
DECLARE @sql VARCHAR(MAX) = 'DECLARE @week1 VARCHAR(MAX) = ''value 1'', @week2 VARCHAR(MAX) = ''value 2'';';
DECLARE @i INT = 1;
WHILE (@i <= 2)
BEGIN
SET @sql = @sql + ' print @week' + CAST(@i AS VARCHAR(6)) + '';
SET @i = @i + 1;
END;
EXEC (@sql);
...生成并执行这个...
DECLARE @week1 VARCHAR(MAX) = 'value 1', @week2 VARCHAR(MAX) = 'value 2'; print @week1 print @week2
【讨论】:
我不应该对这些值进行硬编码,实际上这些是我在这里提到的过程的参数,就像变量一样。以上是关于sql server中的变量问题的主要内容,如果未能解决你的问题,请参考以下文章