ストアドやファンクションで動的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