動的SQL(3)

2018年6月27日


ITコーディネータのシュウです。
003

コスモスがいっぱい咲いてました。ちょっと前の台風で、結構倒れてしまっていたのですが、何とか復活して頑張って咲いています。

<本日の題材>
動的SQL(SQL Server)

今回は、SQL Serverの場合の動的SQLについての内容です。SQL Serverの場合は、EXECUTEステートメント、もしくは、sp_executesql システムストアドプロシージャを利用します。

例)
テーブル名や項目名を変数化して、指定したテーブルから必要な項目についてのデータを抽出する動的SQLの例です。EXECUTEステートメントを使用した場合です。

受注テーブルのデータを指定した条件で抽出します。
その前に、データを確認
SELECT * FROM dbo.受注テーブル
ORDER BY 受注NO;
受注テーブル全件ms

受注テーブルの定義は、Oracleのときと同じ
受注テーブル定義ms

SQLは以下:

DECLARE @tab_name VARCHAR(30)
DECLARE @Col_name VARCHAR(100)
DECLARE @Clause VARCHAR(200)
SELECT @tab_name = 'dbo.受注テーブル’
SELECT @Col_name = '顧客番号, 受注日, 決済金額’
SELECT @Clause = '受注日 BETWEEN "20141028" AND "20141029"’

EXECUTE ('SELECT '+@Col_name+’ FROM '+ @tab_name+’ WHERE '+ @Clause)

パラメータとして、@tab_name にテーブル名、@Col_nameにカラム名、@Clauseには条件を渡し、それを実行します。
(SQL Serverでも、’で囲む文字列の中に’(シングルクォーテーション)を含む場合には、’を2つ連続して記述します)
また、EXECUTEは「EXEC」と省略することもできます。

結果は、以下
受注テーブル結果1ms

受注日が20141028~20141029の期間内での顧客番号、受注日、決済金額を抽出しています。
この各パラメータを変更すれば、動的に対象のテーブル、項目、条件を設定できます。以下は変更した場合の例。

DECLARE @tab_name VARCHAR(30)
DECLARE @Col_name VARCHAR(100)
DECLARE @Clause VARCHAR(200)
DECLARE @sql_stmt VARCHAR(400)
SELECT @tab_name = 'dbo.受注テーブル’
SELECT @Col_name = '顧客番号, 決済金額’
SELECT @Clause = '決済金額 > 300000’
SELECT @sql_stmt = 'SELECT '+@Col_name+’ FROM '+ @tab_name+’ WHERE '+ @Clause

EXEC (@sql_stmt)

結果は、以下
受注テーブル結果2ms

ここでは、最終的に @sql_stmt に組み合わせたSELECT文セットして、それを実行しています。決済金額が 300000円以上の顧客について、顧客番号と決済金額を表示できました。

今日は以上まで

☆おすすめ情報☆☆☆
 企業様で、ExcelやAccessのシステム化を考えておられましたら、既存のExcel、Accessをそのまま使えて、大事なデータはすべてDB保存するdbSheetをおすすめいたします。

dbSheetの紹介ホームページへ
Accessでお困りの企業様は、「Access対応版が提供できるソリューション」をご覧になってみてください。

dbSheetとITを取り巻く情報に関しましては「dbSheet千夜一夜」をご覧ください。
dbSheet千夜一夜ページへ
☆☆☆・・・☆☆☆・・・☆☆☆