2014-07-22 40 views
0

下面的代碼分配值動態的變量列1至Column5爲了使分配給變量以動態的方式

DECLARE @Column1  INT=0, 
    @Column2  INT=0, 
    @Column3  INT=0, 
    @Column4  INT=0, 
    @Column5  INT=0, 
    @I   INT=0, 
    @STMT_ASSIGN NVARCHAR(100) 

SET @I = 1 

WHILE (@I <= 5) 
BEGIN 
    SET @STMT_ASSIGN='SET @Column' + CONVERT(VARCHAR(2), @I) + '=' 
        + CONVERT(VARCHAR(2), @I) 

    IF @I = 1 
    EXEC Sp_executesql 
     @STMT_ASSIGN, 
     N'@Column1 INT output', 
     @Column1 = @Column1 output 
    ELSE IF @I = 2 
    EXEC Sp_executesql 
     @STMT_ASSIGN, 
     N'@Column2 INT output', 
     @Column2 = @Column2 output 
    ELSE IF @I = 3 
    EXEC Sp_executesql 
     @STMT_ASSIGN, 
     N'@Column3 INT output', 
     @Column3 = @Column3 output 
    ELSE IF @I = 4 
    EXEC Sp_executesql 
     @STMT_ASSIGN, 
     N'@Column4 INT output', 
     @Column4 = @Column4 output 
    ELSE 
    EXEC Sp_executesql 
     @STMT_ASSIGN, 
     N'@Column5 INT output', 
     @Column5 = @Column5 output 

    SET @[email protected] + 1 
END 

請提出一個想法,以去除的if..else如果部分..作爲單個sp_execute sql來分配值。因爲我必須使用一個EXEC sp_executesql將50個值分配給50個變量,而不是寫50個If..Else語句。

回答

0

嘗試以下查詢:

DECLARE @Column1  INT=0, 
    @Column2  INT=0, 
    @Column3  INT=0, 
    @Column4  INT=0, 
    @Column5  INT=0, 
    @I   INT=0, 
    @STMT_ASSIGN NVARCHAR(100), 
    @command NVARCHAR(1000) 

SET @I = 1 

WHILE (@I <= 5) 
BEGIN 
    SET @STMT_ASSIGN='SET @Column' + CONVERT(VARCHAR(2), @I) + '=' 
        + CONVERT(VARCHAR(2), @I) 

    SET @command = 'EXEC Sp_executesql 
      @STMT_ASSIGN, 
      N''@Column'+CAST(I AS NVARCHAR(1))+' INT output'', 
      @Column'+CAST(I AS NVARCHAR(1))+' = @Column'+CAST(I AS NVARCHAR(1))+' output' 

    EXEC(@command) 

    SET @[email protected] + 1 
END 
+0

感謝您的更新。我試過這個查詢,但我得到了下面的錯誤。 [我是SQL服務器的新手]。其實我已經宣佈了這個變量。消息137,15級,狀態2,行2 必須聲明標量變量「@STMT_ASSIGN」。 – StackUser

+0

這是因爲該變量超出了動態SQL中的範圍。你想在這裏做什麼?我在這裏或你原來的文章中沒有看到完整的sql語句。從我在這裏看到的,我不明白需要一個循環。 –

+0

我找到了解決方案。謝謝你的迴應 – StackUser