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

ステートメントを動的に作成し、EXECUTEまたはsp_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 に答える