我想使用NOT运算符搜索我的全文索引。
SELECT * FROM CONTAINSTABLE(MY_TABLE, *, 'NOT name'),
以下是异常情况:
Msg 7630, Level 15, State 3, Line 1
Syntax error near 'name' in the full-text search condition 'NOT name'.
什么是问题?我如何使用 只有 NOT 运算符来搜索我的全文索引?
谢谢。
我想使用NOT运算符搜索我的全文索引。
SELECT * FROM CONTAINSTABLE(MY_TABLE, *, 'NOT name'),
Msg 7630, Level 15, State 3, Line 1
Syntax error near 'name' in the full-text search condition 'NOT name'.
什么是问题?我如何使用 只有 NOT 运算符来搜索我的全文索引?
谢谢。
而不是使用 not,您可以使用 not contains:
SELECT * FROM MY_TABLE
where not contains( *, 'name')
供参考:
(该链接为创建SQL Server全文目录和索引的教程)http://blog.sqlauthority.com/2008/09/05/sql-server-creating-full-text-catalog-and-index/
NOT只能出现在AND之后,例如AND NOT。OR NOT操作符不被允许。NOT不能在第一个术语之前指定。
所以在你的情况下,CONTAINSTABLE(MY_TABLE, *, 'NOT name')
被认为是无效的。
我发现使用NOT
运算符与CONTAINSTABLE的唯一方法如下:
SELECT *
FROM CONTAINSTABLE({table_name}, *, N'{another_condition} AND NOT name')
当你不需要RANK
信息时,@NG提交的语法可以正常工作,但是一旦你需要它,似乎你需要在NOT
运算符之前添加另一个(虚拟)条件(如果可以避免,请不要使用虚拟条件,这会非常混乱...)。
注意:在我看来,在CONTAINSTABLE中仅有一个NOT
运算符的概念并没有真正意义,当你的参数是有排名结果时。实际上,如果允许这样做,所有匹配的结果将共享相同的排名值(因为它们不包含被排除的标记)。RANK
将成为无关紧要的信息,可以使用简单的CONTAINS
代替CONTAINSTABLE
(参见@ NG的答案)。