最近知ったことですが、
SQLServer2005になって、
ユーザー定義関数内で非決定的関数が使用できるようになりました。
非決定的関数とは、GetDate()など、呼ぶ状態によって
返す値の違う関数をいいます。
http://msdn2.microsoft.com/ja-jp/library/ms178091.aspx
例えば、以下のように現在日付を文字列として返す関数を作りたい場合、
SQLServer2000では、引数で現在日付を渡す必要があります。
-- SQLServer2000では、こう書くしかない CREATE FUNCTION dbo.uf_GetDateStr(@rdDate DATETIME) RETURNS VARCHAR(8) AS BEGIN-- yyyymmddの文字列を返す
return CONVERT(VARCHAR(8), @rdDate , 112)END
-- 呼び出し方 SELECT dbo.uf_GetDateStr(GetDate())
SQLServer2005では仕様が変わり、
非決定的関数も、ユーザー定義関数内で書くことができるようになりました。
よって、上の関数は、以下のように書き直せます。
-- SQLServer2005では、こう書ける CREATE FUNCTION dbo.uf_GetDateStr() RETURNS VARCHAR(8) AS BEGIN-- yyyymmddの文字列を返す
return CONVERT(VARCHAR(8), GetDate() , 112)END
-- 呼び出し方 SELECT dbo.uf_GetDateStr()
単純に、引数が一つ違うだけですが、
わかり切った値を、引数として、わざわざ渡すのは、
あまり気持ちの良いものではありません。
以前のコードが動けば、そのまま何の疑問もなく
使用していましたが、
バージョンが変わった場合には、
もっとうまく書けるようになっていないか、
気にかけておくと良いのではないでしょうか。