none
動的SQLを生成したい RRS feed

  • 質問

  • SQL serverでカラムを動的に生成させようとしています。
    USE [yu2]
    GO
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    ALTER PROCEDURE [dbo].[var_col_TIME_function] @var_col_TIME NVARCHAR(max) OUTPUT AS
    DECLARE @List nvarchar(max); 
    SET @List = N''; 
    SELECT @List+='s'+sector+N'DATETIME,' 
    FROM dbo.sector; 
    SELECT @var_col_TIME = LEFT(@List,LEN(@List)-1);
    この@var_col_TIME
    (展開されるとs1p DATETIME, s3p DATETIME, s9p DATETIMEのような文字列が作成される)
    を使って
    CREATE TABLE #tmp_records (id INT, @var_col_TIME);
    CREATE TABLE #tmp_records (id INT, s1p DATETIME, s3p DATETIME, s9p DATETIME);
    のようになるにはどのようにストアドを記述すればよいのでしょうか?
    どなたかよろしくお願いいたします。
    2011年6月1日 12:20

回答

すべての返信

  • 文字列を結合して、SQL文の形になるようにしたら、それをEXECUTE命令で実行することができます。

    • 回答としてマーク oira3ryu 2011年6月11日 6:27
    2011年6月1日 15:43
  • 佐祐理さん、いつもありがとうございます。

    返信が遅くなりましたが

    SET @SQL1='CREATE TABLE #tmp_records (id INT, '

    SET @SQL2=@SQL1+@var_col_TIME

    EXEC(@SQL2)

    という形で実行することがわかりました。

    ありがとうございました。

    2011年6月11日 6:26
  • SQL 変数のサイズと、連結する別変数のNULL値には気を付けて下さい。

    拡張可能文字数を超えてしまうケースと、

    NULL値をセットしようとして想定外の動作をしてしまうのは気をつけた方が良いと思います。

    ※前にNULL値で後輩がはまってました。

    2011年6月13日 0:03