概要
oracleのストアドを手動でsqlserver用に変換しているのだけれど、
元のソースが冗長な書き方をしていて無駄な発行を抑えられないかなと思って
いろいろ試してたら予想外な挙動をしたので備忘録。
その1
declare @Quantity int;
SELECT @Quantity = ISNULL(Quantity, 0)
FROM t_XXX
where Quantity = -1;--レコード条件が0になる
select @Quantity;
結果はnull。わかりみが深い。
その2
declare @Quantity int;
Set @Quantity = 0 --★追加したよ
SELECT @Quantity = ISNULL(Quantity, 0)
FROM t_XXX
where Quantity = -1;--レコード条件が0になる
select @Quantity;
結果は0。わかりみが浅い。しかし予想以上に星の存在感すごい。
どういうこと?
Select文の結果行が0件なので、そもそも代入が行われない模様。
つまり「前もって変数に初期値を設定していないと痛い目を見るかもしれないよ」って
ことですね。