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

Pocket

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

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

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

<br />
    DECLARE<br />
        @SqlString AS NVARCHAR(4000)</p>
<p>    SET<br />
        @SqlString = ' INSERT INTO [dbo].[hoge] SELECT * FROM [dbo].[accesslog' + LEFT(CONVERT(varchar,GETDATE(),112),6) + '] WITH (NOLOCK) '<br />
    EXEC sp_executesql @stmt = @SqlString<br />

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

<br />
    DECLARE<br />
        @SqlString AS NVARCHAR(4000),<br />
        @LastAccessDate AS VARCHAR(19)</p>
<p>        @SqlString = ' SELECT @LastAccessDateOUT=CONVERT(varchar,MAX(AccessDate),120) FROM [dbo].[accesslog' + LEFT(CONVERT(varchar,GETDATE(),112),6) + '] WITH (NOLOCK) '</p>
<p>    EXEC sp_executesql @SqlString, N'@LastAccessDateOUT VARCHAR(19) OUTPUT', @LastAccessDateOUT=@LastAccessDate OUTPUT<br />

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

コメントを残す