2010-08-02 39 views
1

有沒有辦法將組合變量的值傳遞給另一個變量? 我想用一個簡單的代碼,我寫的更好...在SQL中需要幫助變量替換

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 '[email protected] 
    end 
    set @intFlag = @intFlag+1 ; 
End 

Expected output 
    do something for A 
    do something for B 
    do something for C 

我真的很感激任何幫助。

謝謝。
Elmer

回答

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 
+0

嗨OMG,我不能使用這種情況下,因爲實際的數據可能超過4. – Elmer 2010-08-02 03:23:08

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 
+0

嗨Remus 我會嘗試這一個..謝謝你的努力。 – Elmer 2010-08-02 08:53:28