如何使用逻辑运算符对自由文本CONTAINS进行参数化查询?

时间:2014-10-17 17:56:37

标签: sql-server full-text-search

我在SQL Server中动态创建参数化的查询。当谈到CONTAINS谓词时,我遇到了一个我无法找到答案的问题。

如果CONATINS将具有逻辑运算符(OR,AND,AND NOT),我是否必须枚举每个值或者是否为所有值使用一个参数?

这是一个静态的例子:

SELECT * FROM SomeTable WHERE CONTAINS(ColumName, ‘Cat and Dog’);

这是正确的参数化示例吗?

SELECT * FROM SomeTable WHERE CONTAINS(ColumName, ‘@Q1 and @Q2’);

@Q1 = “Cat”
@Q2 = “Dog”

或者这是正确的方法吗?

SELECT * FROM SomeTable WHERE CONTAINS(ColumName, ‘@Q1’);

@Q1 = “Cat and Dog”

或者是完全不同的东西?

1 个答案:

答案 0 :(得分:0)

当我问这个问题时,我没有启用全文的数据库,我可以对其进行测试。我只是在编写代码和单元测试。从那时起,我设法找到了一个可以测试的数据库。

第二个例子是最接近的。唯一的问题是参数被引用,所以它会搜索文字" @ Q1"。

SELECT * FROM SomeTable WHERE CONTAINS(ColumName, @Q1);

@Q1 = “Cat and Dog”

如果查询需要一个生成术语,邻近术语或wieghted术语,那么那些也需要在参数中。

@Q1 = 'FORMSOF(INFLECTIONAL, Cat) and FORMSOF(INFLECTIONAL, Dog)'
@Q1 = 'FORMSOF(THESAURUS, Cat) and FORMSOF(THESAURUS, "Dog")'
@Q1 = 'Cat NEAR Dog'