全文搜索查询的语法无效?

时间:2015-05-18 09:16:52

标签: sql-server stored-procedures

我试图在存储过程中封装全文搜索查询。这是程序创建代码本身:

CREATE PROCEDURE [dbo].[fts]
    @query varchar, 
    @salesbase int
AS
    SELECT c1.* FROM CONTACT1 c1
        JOIN CONTACT2 c2 ON c1.ACCOUNTNO = c2.ACCOUNTNO
    WHERE c2.USLEBASE = @salesbase
    AND (
        CONTAINS(c1.COMPANY, @query) OR
        CONTAINS(c1.ADDRESS1, @query) OR
        CONTAINS(c1.CONTACT, @query)
    )

调用@query设置为'"*Donalds*"'的存储过程将返回以下错误:

EXECUTE [fts] @query = '"*Donalds*"', @salesbase = 410
> Syntax error near '"' in the full-text search condition '"'.

这让我感到困惑,因为如果我引用了肉类的话。它上面的存储过程 - 使用完全相同的值 - 没有语法错误。

SELECT c1.* FROM CONTACT1 c1
    JOIN CONTACT2 c2 ON c1.ACCOUNTNO = c2.ACCOUNTNO
WHERE c2.USLEBASE = 410
AND (
    CONTAINS(c1.COMPANY, '"*Donalds*"') OR
    CONTAINS(c1.ADDRESS1, '"*Donalds*"') OR
    CONTAINS(c1.CONTACT, '"*Donalds*"')
)
> (291 row(s) affected)

我必须遗漏一些基本的东西。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您应该声明具有指定长度的varchar变量。 根据{{​​3}}并且据我所知,如果您宣布varchar没有特定长度,则实际上是宣布varchar(1)

this article中也说明了这一点:

  

如果在数据定义或变量声明语句中未指定n,则默认长度为1.使用CAST和CONVERT函数时未指定n时,默认长度为30.