これまで私はISNULL(dbo.fn_GetPrice(ItemId), 0)
それをnull許容にしないようにするために使用してきました(むしろデフォルト値と呼びますが、何でも)。
これは正しい方法ですか?
これまで私はISNULL(dbo.fn_GetPrice(ItemId), 0)
それをnull許容にしないようにするために使用してきました(むしろデフォルト値と呼びますが、何でも)。
これは正しい方法ですか?
はい、それはそれを行う正しい方法です。この関数を使用するisnull
と、何があっても値を返さなければならない式を作成できます。これは、SQLServerによって計算された列であると評価されますnot null
。
ANSI 標準の COALESCE 関数を使用したいのですが、ISNULL で問題ありません。COALESCE を使用するには、計算列を次のように定義します。
COALESCE(dbo.fn_GetPrice(ItemId), 0)
EDIT毎日何か新しいことを学びましょう。私は次のことをしました:
create table t (c1 int null
, c2 as isnull(c1, 1)
, c3 as isnull(c1, null)
, c4 as coalesce(c1, 1)
, c5 as coalesce(c1, null)
)
exec sp_help t
また、sp_help によると、c2 は実際には null 許容ではありませんが、合体式が null 値になる可能性はありませんが、c4 は null 許容であると報告されています。
また、2008年の時点で、オプションが2005年に存在するかどうかはわかりません。計算列を永続化し、制約を追加できます。
create table t (c1 int null
, c2 as isnull(c1, 1) persisted not null
, c3 as isnull(c1, null) persisted not null
, c4 as coalesce(c1, 1) persisted not null
, c5 as coalesce(c1, null) persisted not null
)
go
insert into t (c1) values (null)
制約違反になります。