1

次のクエリをパラメータ化するにはどうすればよいですか? (ちなみに、私は全文索引付きテーブルを使用しているため、CONTAINS()

SELECT * FROM Table WHERE CONTAINS(Column, 'cat OR dog') 
and ((column NOT LIKE '%[^ cat OR dog]%')); 

これはうまくいきませんでした:

 DECLARE @term1 VARCHAR(10);

 DECLARE @term2 VARCHAR(10);

 SET @term1 = 'cat';

 SET @term2 = 'dog';

SET @term3 = @term1 + ' ' + 'OR' + ' ' + @term2;

SET @term4 = '[^ @term1  OR  @term2 ]' ;

SELECT * FROM table WHERE CONTAINS(column, @term3) <--up to this point works
AND (column NOT LIKE '%[@term4]%'); <--this part doesn't include the second term (@term2)

最後にこれをいじりたい場合は、私の全文インデックス付きテーブルは次のようになります。

 animalListID     AnimalsList
       1           cat dog
       2           cat
       3           cat dog bird

SELECT(基本的に、「cat dog」と「cat」を含む行を返し、「cat dog bird」を含まないステートメントのパラメーター化されたバージョンが必要です)

**これは私のデータの非常に単純化されたバージョンですが、問題は私が達成しようとしている概念と完全に一致しています。テーブルには何百万もの行があり、各行には多くの用語があります。

4

1 に答える 1

2

やったほうがいい

SET @term4 = '[^ ' + @term1 + ' OR ' + @term2 + ' ]';

column NOT LIKE '%' + @term4 + '%'

または、初期化して記号@term4を含めることもできます。%

SET @term4 = '%[^ ' + @term1 + ' OR ' + @term2 + ' ]%';

LIKE次に、ステートメントを次のように簡略化します。

column NOT LIKE @term4
于 2012-10-26T18:03:35.643 に答える