SQLServerでSELECT句で変数代入
ストアドプロシージャ等でDECLAREで定義した変数に値を代入する場合、SET句やSELECT句を使用しますが、SELECT句を使用するとコードがスッキリします。
コーディング例
BEGIN DECLARE @ThisDate DATE; DECLARE @NextDate DATE; DECLARE @TempDate DATE; -- SET句で変数代入 SET @ThisDate = GETDATE(); SET @NextDate = DATEADD(DAY,1,@ThisDate); IF (DATEPART(MONTH,@ThisDate) % 2) = 0 BEGIN SET @TempDate = EOMONTH(DATEADD(MONTH,1,@ThisDate)); END ELSE SET @TempDate = EOMONTH(DATEADD(MONTH,-1,@ThisDate)); END SELECT @ThisDate AS [@ThisDate] ,@NextDate AS [@NextDate] ,@TempDate AS [@TempDate] ; -- SELECT句で変数代入 SELECT @ThisDate = GETDATE() ,@NextDate = DATEADD(DAY,1,@ThisDate) ,@TempDate = (DATEPART(MONTH,@ThisDate) % 2) ,@TempDate = CASE WHEN @TempDate = 0 THEN EOMONTH(DATEADD(MONTH,1,@ThisDate)) ELSE EOMONTH(DATEADD(MONTH,-1,@ThisDate)) END ; SELECT @ThisDate AS [@ThisDate] ,@NextDate AS [@NextDate] ,@TempDate AS [@TempDate] ; END
実行結果
@ThisDate | @NextDate | @TempDate |
---|---|---|
2020-02-10 | 2020-02-11 | 2020-03-31 |
@ThisDate | @NextDate | @TempDate |
---|---|---|
2020-02-10 | 2020-02-11 | 2020-03-31 |
上記の通り、SET句で変数代入した場合と、SELECT句で変数代入した場合で実行結果は同じになります。
SET句を使用した場合、9~15行目のように条件文を使用するとBEGIN、ENDが必要になりステップ数が増えてしまいます。
一方、SELECT句を使用すると29~32行目のようにCASE文が使用できますのでBEGIN、ENDは不要になります。
また、25行目で代入した変数の値を26行目で参照することも可能です。
これを応用すると27~32行目のように変数への代入を2段階に分けることができるので、複雑で長い記述を簡素化できます。
以上、「SQLServerでSELECT句で変数代入」の紹介でした。