🏃‍♂️

SQLServerでの動的クエリーの書き方

2023/03/14に公開

備忘録として、SQLServerでの動的クエリーの書き方です。

シンプルなクエリー

シンプルな動的クエリー
use[SAMPLE]

declare @sql nvarchar(max)

set @sql = '
select
    SampleId as ID,
    SampleName as 名前,
from
    SampleTable '

exec (@sql)

任意のSELECT条件に応じてクエリーを結合する

動的クエリーを操作する
use[SAMPLE]

declare @sql nvarchar(max)
declare @Terminal nvarchar(50)
declare @OperationName nvarchar(50)
declare @RegistDatetimeFrom nvarchar(max)
declare @RegistDatetimeTo nvarchar(max)

-- ↓↓↓↓↓↓↓任意のSELECT条件を設定する↓↓↓↓↓↓↓

set @Terminal = ''
set @OperationName = ''
set @RegistDatetimeFrom = ''
set @RegistDatetimeTo = ''

-- ↑↑↑↑↑↑↑任意のSELECT条件を設定する↑↑↑↑↑↑↑

set @sql = '
select
    SampleId as ID,
    SampleName as 名前,
from
    SampleTable
where
    1 = 1'

-- ↓↓↓↓↓↓↓条件に応じてクエリーを結合していく↓↓↓↓↓↓↓

if @Terminal <> ''
begin
    set @sql += N'  and Terminal = ''' + @Terminal + ''''
end

if @OperationName <> ''
begin
    set @sql += N'  and OperationName = ''' + @OperationName + ''''
end

if @RegistDatetimeFrom <> ''
begin
    set @sql += N'  and RregistDatetime >= convert(datetime, ''' + @RegistDatetimeFrom + ''')'
end

if @RegistDatetimeTo <> ''
begin
    set @sql += N'  and RregistDatetime <= convert(datetime, ''' + @RegistDatetimeTo + ''')'
end

-- ↑↑↑↑↑↑↑条件に応じてクエリーを結合していく↑↑↑↑↑↑↑

exec (@sql)

このようにして、動的クエリーを作成・操作することができます。
また、実行された動的クエリーを確認したい場合は、動的クエリーを設定した変数をselectしてあげればOKです。

実行された動的クエリーの確認
exec (@sql)

select @sql as 実行クエリー

Discussion