0

私はこれを理解しています

IF EXISTS(SELECT NULL) PRINT 'TRUE';

TRUE結局のところSQLServerの値であるため、常に出力NULLされますが、なぜこれが

IF EXISTS(SELECT NULL) PRINT 'TRUE'

TRUEサブクエリがエラーを引き起こし、EXISTS常に存在をチェックするので、どうしてこれが可能になるので、印刷します。

4

1 に答える 1

5

質問にコピー/貼り付けエラーがあるために推測します

EXISTSは値をチェックしません。行をチェックします。

SELECTが1つの行を与えるので、これらは有効です。

IF EXISTS(SELECT 1/0) PRINT 'TRUE' 
IF EXISTS(SELECT NULL) PRINT 'TRUE';
IF EXISTS(SELECT CAST('fish' AS int)) PRINT 'TRUE';

説明するために、ANSI-92 SQLを見て、「」を検索しますQuery expressions 191

これはケース3a(私の太字)です:

<select list> "*"がに含まれているだけで、<subquery> すぐにに含まれている場合、<exists predicate>は任意の<select list>に相当します。<value expression> <literal>

したがって、これは、EXISTSビットに古いゴミを含めることができることを示しています。無視する必要があります

于 2011-08-05T10:24:42.600 に答える