動的SQLの結果を変数に返したい

Pocket

ストアドやファンクションで動的SQLを使う機会がとても多いです
以前は、PostgreSQL で動的SQLを作ってたのですが、最近は SQL Server で作るのがとても多い

覚書の為に、動的 SQL のサンプルを書いておくことにする

[dbo].[accesslogyyyymm] のデータを [dbo].[hoge] に入れます
yyyymm は実行する月によって変わります

    DECLARE
        @SqlString AS NVARCHAR(4000)

    SET
        @SqlString = ' INSERT INTO [dbo].[hoge] SELECT * FROM [dbo].[accesslog' + LEFT(CONVERT(varchar,GETDATE(),112),6) + '] WITH (NOLOCK) '
    EXEC sp_executesql @stmt = @SqlString

普通に実行するだけなら上記でいいのです。
動的SQL でMAX() や MIN() の結果を変数に返したい場合ってありますよね
忘れるので書いておきます

    DECLARE
        @SqlString AS NVARCHAR(4000),
        @LastAccessDate AS VARCHAR(19)

        @SqlString = ' SELECT @LastAccessDateOUT=CONVERT(varchar,MAX(AccessDate),120) FROM [dbo].[accesslog' + LEFT(CONVERT(varchar,GETDATE(),112),6) + '] WITH (NOLOCK) '



    EXEC sp_executesql @SqlString, N'@LastAccessDateOUT VARCHAR(19) OUTPUT', @LastAccessDateOUT=@LastAccessDate OUTPUT

いつもドキュメント見ないとわからないなぁ(^^9

コメントを残す