参数化使用NOT LIKE,“^”通配符的SQL查询?

时间:2012-10-25 21:32:01

标签: sql-server-2008 wildcard sql-like

如何参数化以下查询? (顺便说一句,我使用的是全文索引表,因此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'的行

**这是我的数据的一个非常简单的版本,但问题是我想要实现的概念的完全匹配。该表将包含数百万行,每行中包含许多术语。

1 个答案:

答案 0 :(得分:2)

你应该做

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

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

或者,您可以初始化@term4以包含%标志:

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

然后将LIKE语句简化为:

column NOT LIKE @term4