Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 参数化使用“不喜欢”的SQL查询&引用;通配符?_Sql Server 2008_Wildcard_Sql Like - Fatal编程技术网

Sql server 2008 参数化使用“不喜欢”的SQL查询&引用;通配符?

Sql server 2008 参数化使用“不喜欢”的SQL查询&引用;通配符?,sql-server-2008,wildcard,sql-like,Sql Server 2008,Wildcard,Sql Like,如何参数化以下查询?(顺便说一下,我使用的是全文索引表,因此包含()) 这不起作用: 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 * FR

如何参数化以下查询?(顺便说一下,我使用的是全文索引表,因此
包含()

这不起作用:

 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)
(基本上,我需要
SELECT
语句的参数化版本,该语句返回带有“cat dog”和“cat”而不是“cat dog bird”的行)

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

您应该这样做

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


或者,您可以初始化
@term4
,以包括
%
符号:

SET @term4 = '%[^ ' + @term1 + ' OR ' + @term2 + ' ]%';
然后将
LIKE
语句简化为:

column NOT LIKE @term4

你只有两个学期吗?因为只有4种不同的组合“狗”、“猫”、“狗-猫”、“猫-狗”,所以您可以创建4种组合,只需执行精确的匹配搜索。不,这是在一个包含数百万行的全文搜索大型表格中。我只希望contains语句中的术语完全匹配(/没有包含除这些术语以外的任何内容的行)。每次执行搜索时,参数都会不同(因此我没有在
CONTAINS()
处停下来)是的,但是您可以先使用CONTAINS,然后再使用与的组合。我刚刚发布了一个可能有用的答案。我很高兴它有用。您需要小心:在T-SQL中,
'@term1'
从字面上表示该字符串,而不是
@term1
变量的值。您知道,我实际上以为我是在用括号“转义”它。肯定有一个灰色区域,上面有括号和参数。我不熟悉“^”通配符和转义括号——非常有用。真不敢相信我以前不知道。
column NOT LIKE '%' + @term4 + '%'
SET @term4 = '%[^ ' + @term1 + ' OR ' + @term2 + ' ]%';
column NOT LIKE @term4