1

これまで私はISNULL(dbo.fn_GetPrice(ItemId), 0)それをnull許容にしないようにするために使用してきました(むしろデフォルト値と呼びますが、何でも)。

これは正しい方法ですか?

4

2 に答える 2

3

はい、それはそれを行う正しい方法です。この関数を使用するisnullと、何があっても値を返さなければならない式を作成できます。これは、SQLServerによって計算された列であると評価されますnot null

于 2009-12-21T04:25:20.927 に答える
2

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)

制約違反になります。

于 2009-12-21T23:15:58.297 に答える