有没有办法将组合变量的值传递给另一个变量? 我想用我编写的简单代码更好...
DECLARE @intFlag INT
DECLARE @taxdepn1 varchar(1) = 'A'
,@taxdepn2 varchar(1) = 'B'
,@taxdepn3 varchar(1) = 'C'
,@taxdepn4 varchar(1) = null --'D' `
DECLARE @xxx varchar(1000);
SET @intFlag = 1
WHILE (@intFlag <=4)
BEGIN
set @xxx = '@taxdepn'+cast(@intFlag as CHAR) ;
-- Here, I want to get the actual value of @Taxdepn1 to @TaxDepn4
if @xxx is not null
begin
print 'do something for '+@xxx
end
set @intFlag = @intFlag+1 ;
End
Expected output
do something for A
do something for B
do something for C
我真的很感激任何帮助。
感谢。
埃尔默
答案 0 :(得分:1)
为了做你正在尝试的事情,你需要使用动态SQL。这是一个不需要动态SQL的替代方法,但是您静态定义了要创建的引用:
WHILE (@intFlag <=4)
BEGIN
SET @xxx = CASE @intFlag
WHEN 1 THEN @taxdepn1
WHEN 2 THEN @taxdepn2
WHEN 3 THEN @taxdepn3
ELSE @taxdepn4
END
IF @xxx IS NOT NULL
BEGIN
PRINT @xxx
END
END
答案 1 :(得分:1)
使用sp_executesql
,但相当麻烦。 @ taxdepn1 ... @ taxdepn4必须作为参数传入,然后动态sql可以使用它们进行实时评估,返回分配给输出参数的值:
while (@intFlag <= 4)
begin
declare @sql nvarchar(max);
set @sql = N'set @out = @in' + cast(@intFlag as nchar);
declare @xxx char(1);
exec sp_executesql @sql,
N'@in1 char(1), @in2 char(1), @in3 char(1), @in4 char(1), @out char(1) output',
@taxdepn1, @taxdepn2, @taxdepn3, @taxdepn4, @xxx output;
if @xxx is not null
begin
...
end
set @intFlag += 1;
end