全文搜索查询的语法无效?
Invalid syntax for full text searching query?
我正在尝试将全文搜索查询封装在存储过程中。这是过程创建代码本身:
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*"'
的存储过程将 return 出现以下错误:
EXECUTE [fts] @query = '"*Donalds*"', @salesbase = 410
> Syntax error near '"' in the full-text search condition '"'.
这让我感到困惑,因为如果我自己调用存储过程的 'meat' - 使用完全相同的值 - 没有语法错误。
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)
我一定是漏掉了一些基本的东西。有什么想法吗?
您或许应该声明具有指定长度的 varchar
变量。
根据 this article 和我所知,如果你声明一个没有特定长度的 varchar
,你实际上是在声明 varchar(1)
.
这在MSDN's page about char and varchar中也有说明:
When n is not specified in a data definition or variable declaration statement, the default length is 1. When n is not specified when using the CAST and CONVERT functions, the default length is 30.
我正在尝试将全文搜索查询封装在存储过程中。这是过程创建代码本身:
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*"'
的存储过程将 return 出现以下错误:
EXECUTE [fts] @query = '"*Donalds*"', @salesbase = 410
> Syntax error near '"' in the full-text search condition '"'.
这让我感到困惑,因为如果我自己调用存储过程的 'meat' - 使用完全相同的值 - 没有语法错误。
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)
我一定是漏掉了一些基本的东西。有什么想法吗?
您或许应该声明具有指定长度的 varchar
变量。
根据 this article 和我所知,如果你声明一个没有特定长度的 varchar
,你实际上是在声明 varchar(1)
.
这在MSDN's page about char and varchar中也有说明:
When n is not specified in a data definition or variable declaration statement, the default length is 1. When n is not specified when using the CAST and CONVERT functions, the default length is 30.