質問

これまでのところ私は(むしろ、デフォルト値を呼び出しますが、何でも)それはNULL不可能にするためにISNULL(dbo.fn_GetPrice(ItemId), 0)を使用してきた。

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

役に立ちましたか?

解決

はい、それはそれを行うには正しい方法です。 isnull機能を使用することによって、あなたは、どんな値を返さないしなければならない式を作成しています。これはnot nullで計算列であることをSQL Serverで評価されます。

他のヒント

私は、ANSI標準のCOALESCE関数を好むだろうが、ISNULLは大丈夫です。 COALESCEを使用するには、計算列を定義します。

COALESCE(dbo.fn_GetPrice(ItemId), 0)

編集何か新しい日常をご覧ください。私は次のようでした。

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

とC2は、sp_helpはに従って実際にNULL可能ではありませんが、C4は、式がNULL値になる可能性が合体する方法がないにも関わらず、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)

制約違反で結果。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top