2

次の SQL は、私がやろうとしていることを示しているはずです。残念ながら、実行しようとすると、「null or empty full-text predicate」というエラーが表示されます。

DECLARE 
    @essaySearchTerm varchar(100), 
    @game_id varchar(100)
SET @essaySearchTerm = NULL; 
SET @game_id = 2; 

SELECT * FROM tblImageInfo i
WHERE i.game_id = @game_id 
        AND (@essaySearchTerm IS NULL OR CONTAINS(i.essay, @essaySearchTerm))

このエラーはどういう意味ですか? どうすればこれを修正できますか?

4

2 に答える 2

3

これは、SQL Server 演算子がショートサーキットであることが保証されていないためです。したがって、式 'A OR B' がある場合、A の論理値に関係なく、A と B の両方が評価されることがあります。詳細については、この投稿またはこの投稿を参照てください。詳細。

あなたの場合、 @essaySearchTerm が null の場合、評価しようとしますがCONTAINS(i.essay, NULL)、これは違法です。コードを次のように変更した後:

IF ISNULL(@essaySearchTerm, '') = ''
SET @essaySearchTerm = '""';

SELECT * FROM tblImageInfo i
WHERE i.game_id = @game_id 
  AND (@essaySearchTerm = '""' OR CONTAINS(i.essay, @essaySearchTerm))

OR の右側は有効な式になりCONTAINS(x, '""')、空のセットが返されます。

于 2013-04-27T22:28:13.980 に答える