Sql server 以动态方式为变量赋值

Sql server 以动态方式为变量赋值,sql-server,Sql Server,下面的代码动态地为变量Column1到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

下面的代码动态地为变量Column1到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 @I=@I + 1
END
请建议删除if..else if。。部分以使其成为单个sp_,执行sql以分配值。因为我必须使用一个EXEC sp_executesql为50个变量分配50个值,而不是编写50个If..Else语句。

尝试以下查询:

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 @I=@I + 1
END

谢谢你的更新。我尝试了这个查询,但是我得到了下面的错误。[我是SQL server新手]。实际上我已经声明了那个变量。Msg 137,级别15,状态2,第2行必须声明标量变量@STMT_ASSIGN。这是因为该变量在动态sql中超出范围。你想在这里干什么?我在这里或您的原始帖子中没有看到完整的sql语句。从我在这里看到的,我根本不理解循环的必要性。我找到了解决方案。谢谢你的友好回复