我正在尝试在多个列上执行包含多个术语的CONTAINS查询,如下所示:
- SELECT ID
- FROM Table
- WHERE CONTAINS((Data1,Data2,Data3),'"foo" & "bag" & "weee"')
但是,此查询的行为与我想要的不一样:我希望它返回所有记录,其中所有条目在至少一个列中至少出现一次,如下所示:
- SELECT ID
- FROM Table
- WHERE CONTAINS((Data1,'"foo"')
- AND CONTAINS((Data1,'"bag"')
- AND CONTAINS((Data1,'"weee"')
虽然此查询返回正确的结果,但每个术语都需要一个单独的AND子句.有没有办法用上面的例子中的单个where子句表达相同的查询?当在(固定)函数中包含查询时,这将是方便的.
解决方法
sql Server曾经以这种方式运行,但它被认为是
bug并且“已更正”.
您需要在计算列上创建FULLTEXT索引:
- DROP TABLE t_ft
- CREATE TABLE t_ft (id INT NOT NULL,data1 NVARCHAR(MAX) NOT NULL,data2 NVARCHAR(MAX) NOT NULL,data3 NVARCHAR(MAX) NOT NULL,totaldata AS data1 + ' ' + data2 + ' ' + data3,CONSTRAINT pk_ft_id PRIMARY KEY (id))
- CREATE FULLTEXT INDEX ON t_ft (totaldata LANGUAGE 1033) KEY INDEX pk_ft_id
- INSERT
- INTO t_ft
- VALUES (1,'foo bar','baz','text')
- INSERT
- INTO t_ft
- VALUES (2,'bax','text')
- SELECT *
- FROM t_ft
- WHERE CONTAINS (*,'foo AND baz')