在SQL中需要帮助变量替换

时间:2010-08-02 03:02:28

标签: sql tsql

有没有办法将组合变量的值传递给另一个变量? 我想用我编写的简单代码更好...

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  

我真的很感激任何帮助。

感谢。
埃尔默

2 个答案:

答案 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