【发布时间】:2012-10-25 21:32:00
【问题描述】:
如何参数化以下查询? (顺便说一下,我使用的是全文索引表,因此是 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 种不同的组合“狗”、“猫”、“狗猫”、“猫狗”,所以您可以创建 4 种组合并进行精确匹配搜索。
-
不,这是在具有数百万行的全文搜索巨大表中。我想要包含语句中仅术语的完全匹配(/除这些术语之外的任何行)。每次进行搜索时,参数都会有所不同(因此我没有停在
CONTAINS()) -
可以,但您可以先使用 contains,然后再使用 AND 组合。我刚刚发布了一个可能有用的答案。
标签: sql-server-2008 wildcard sql-like