プログラ生活

プログラム初学者のためのポイントを書いていこうと思います。たまに脇道それた記事もありますが、息抜きだとおもって気長にお付き合いください。

【SQL Server(連載)】動的SQL -45-

www.pon-x.jp

前回の続き

今回は、動的にSQLを生成してみようと思います。

SQLを文字列として変数に格納

これ自体はそんなに難しいものではありません。

DECLARE @SQL NVARCHAR(500)

SET @SQL = 'SELECT * FROM Person.Person'

EXEC (@SQL)

上記は「SELECT * FROM Person.Person」を実行しているのと同じ結果です。
SQL文字列をEXEC()で実行することができます。

こんなかんじ。
f:id:hanabusa-snow:20210214001431p:plain

動的な変数

ここまで読んでくれた方、「これ意味あるの!?」とおもいますよね。
およらく、多くは変数の部分を動的に使うから意味があると思うので、紹介します。

例えば、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)

結果はこんな感じ
f:id:hanabusa-snow:20210214002126p:plain

SQLでは、文字列はシングルクォーテーションでくくるというルールがややこしいですね。

以下のSQLで出力を確認してみるとよくわかると思います。

DECLARE @PARAM NVARCHAR(10)

SET @PARAM = '''EM'''

PRINT @PARAM

こんなかんじ
f:id:hanabusa-snow:20210214002219p:plain

実は、シングルクォーテーションは文字列をくくる以外に、エスケープという目的があります。
つまり、「'''」は2つ目のシングルクォーテーションが3つ目のシングルクォーテーションをエスケープしているので、
「 '''EM'''」は、1つ目と最後のシングルクォーテーションにくくられている「'E'」ということになるのです。



以上、今回はここまで。