2

当我在做一个小任务时,我遇到了一个情况

DECLARE   @i  INT ,
    @l  INT ,
    @desc  CHAR(50)

SET    @l = 1 
SET    @i = 20
WHILE   ( @l <= @i ) 
BEGIN
  SELECT  'Test'   AS   'Test'+@l
  SET @l =   @l  +  1
END

在这段代码中,我希望当一个循环运行时,所有时间列名都随着@l 的值而改变。

4

1 回答 1

4

您需要动态构建语句并使用EXECUTEsp_executesql来执行该语句。

DECLARE   @i  INT ,
          @l  INT ,
          @desc  CHAR(50)

SET @l = 1 
SET @i = 20

WHILE   ( @l <= @i ) 
BEGIN
    EXEC ('SELECT  ''Test''   AS   Test'+@l)
    SET @l =   @l  +  1
END

走进动态SQL的世界推荐阅读:动态SQL的祸与福

改用 sp_executesql:

DECLARE   @i  INT ,
          @l  INT ,
          @desc  CHAR(50),
          @SQL NVARCHAR(100)

SET @l = 1 
SET @i = 20

WHILE   ( @l <= @i ) 
BEGIN
    SET @SQL = N'SELECT  ''Test''   AS   Test'+CAST(@l AS NVARCHAR(10))
    EXEC sp_executesql @SQL
    SET @l =   @l  +  1
END
于 2013-01-08T07:38:21.337 回答