0

組み込みのブール関数がNULL入力時に異なる動作をするのはなぜですか? 例 - このクエリ:

select 'ISDATE(null)'                 as function_call, 
        ISDATE(null) as result union all
select 'ISNUMERIC(null)'              as function_call, 
        ISNUMERIC(null) as result union all
select 'IS_MEMBER(null)'              as function_call, 
        IS_MEMBER(null) as result union all
select 'IS_SRVROLEMEMBER(null, null)' as function_call, 
        IS_SRVROLEMEMBER(null, null) as result

私たちに与えます:

function_call                result
---------------------------- -----------
ISDATE(null)                 0
ISNUMERIC(null)              0
IS_MEMBER(null)              NULL
IS_SRVROLEMEMBER(null, null) NULL

はブール論理に従って動作するように見えますがISDATE、-は3つの値の論理に従って動作します。すべてのブール関数が NULL 入力で同じように動作するべきではありませんか? それについてANSI SQL標準は何と言っていますか?ISNUMERICIS_MEMBERIS_SRVROLEMEMBER

ありがとう

4

2 に答える 2

0

IS_SRVROLEMEMBERこれらのセキュリティ関数 ( ) がシステム/データ型関数 ( ) と異なる動作をすることは奇妙ではありません。ISNUMERICこれらのセキュリティ関数は本質的にクエリであり、クエリを実行する人によって結果が変わる可能性があるためです。null を含む戻り値の意味は、MSDN ドキュメントでこれらすべてについて詳しく説明されています。

より具体的には、 と の引数についてISNUMERICISDATE、引数が null かどうかを事前に十分にテストできるため、null を返す必要があるかどうか、または実用性が高いかどうかはわかりません。

セキュリティ関数への引数については、null 以外の引数を使用できますが、関数は、引数が有効でない場合、見つからない場合、またはアクセス許可がない場合に null を返す便利な方法で構築されています。答えを知ること。

これの多くは確かに主観的なものと見なされる可能性があるため、興味深いかもしれませんが、この質問を閉じることに投票しました.

于 2013-04-18T15:10:51.683 に答える