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句で変数代入」の紹介でした。







