前回の続き
今回は、動的にSQLを生成してみようと思います。
SQLを文字列として変数に格納
これ自体はそんなに難しいものではありません。
DECLARE @SQL NVARCHAR(500) SET @SQL = 'SELECT * FROM Person.Person' EXEC (@SQL)
上記は「SELECT * FROM Person.Person」を実行しているのと同じ結果です。
SQL文字列をEXEC()で実行することができます。
こんなかんじ。
動的な変数
ここまで読んでくれた方、「これ意味あるの!?」とおもいますよね。
およらく、多くは変数の部分を動的に使うから意味があると思うので、紹介します。
例えば、PersonTypeの値を動的に変えてあげる動的SQLを作成しています。
DECLARE @SQL NVARCHAR(500) DECLARE @PARAM NVARCHAR(10) SET @PARAM = '''EM''' SET @SQL = 'SELECT * FROM Person.Person ' SET @SQL += 'WHERE PersonType = ' SET @SQL += @PARAM EXEC (@SQL)
結果はこんな感じ
SQLでは、文字列はシングルクォーテーションでくくるというルールがややこしいですね。
以下のSQLで出力を確認してみるとよくわかると思います。
DECLARE @PARAM NVARCHAR(10) SET @PARAM = '''EM''' PRINT @PARAM
こんなかんじ
実は、シングルクォーテーションは文字列をくくる以外に、エスケープという目的があります。
つまり、「'''」は2つ目のシングルクォーテーションが3つ目のシングルクォーテーションをエスケープしているので、
「 '''EM'''」は、1つ目と最後のシングルクォーテーションにくくられている「'E'」ということになるのです。
以上、今回はここまで。