SQLServerでSELECT句で変数代入

SQLServer

ストアドプロシージャ等で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句で変数代入」の紹介でした。