GetDate()
決定論的ではありませんでした。決定論的とは、同じパラメータが渡されたときに常に同じ結果を返すことを意味します。
rand()
と共通 列ごとに1回評価されます ただし、一度評価されると、すべての行で同じままになります。
rand()
を使用すると、この動作を簡単に確認できます。 getdate()
より
select top 4 rand(), rand()
from sys.objects
返品
---------------------- ----------------------
0.0566172633850772 0.431111195699363
0.0566172633850772 0.431111195699363
0.0566172633850772 0.431111195699363
0.0566172633850772 0.431111195699363
次のことを試してみてください
select top 10 getdate(), getdate()
from sys.objects
実際の実行プランのComputeScalar演算子のプロパティを見ると、GetDate()
であることがわかります。 2回評価されます。
注意:SQL 2000以降、クエリごとではなく列ごとの評価のこの動作が変更された可能性がありますが(わかりません)、BOLが決定論的の意味として定義しているのはそれではありません。