我在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”
或者是完全不同的东西?
答案 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'