全文搜索拒绝在没有引号的情况下工作

时间:2015-07-02 08:21:18

标签: sql sql-server full-text-search

但与此同时,引号如果被替换,则会破坏查询。

我有这个问题:

SELECT * FROM CONTACT1 WHERE CONTAINS(COMPANY, N'Aktie')

这不会返回任何结果。但是,如果我将此查询更改为...

SELECT * FROM CONTACT1 WHERE CONTAINS(COMPANY, N'"*Aktie*"')

现在我得到了我实际期待的结果。我认为这是因为使用星号作为通配符,虽然我不明白为什么引号会解决问题。此外,如果我将此代码放在存储过程后面并传递完全相同的参数"*Aktie*",我将收到一条错误消息:

Syntax error near '"' in the full-text search condition '"'.

为什么呢?我没有SQL开发,但我需要使用全文搜索作为我当前功能的一部分,我无法找到任何具体的答案。

" Aktie"是瑞典语单词的一部分,但瑞典单词应该被英语单词断言者识别。

根据要求,SProc的代码。

CREATE PROCEDURE gr_fulltextsearch 
  @query nvarchar
AS
  SELECT * FROM CONTACT1 WHERE CONTAINS(COMPANY, @query)
GO

测试代码:

EXEC gr_fulltextsearch @query='"*Aktie*"'
> Syntax error near '"' in the full-text search condition '"'.

SELECT * FROM CONTACT1 WHERE CONTAINS(COMPANY, N'"*Aktie*"')
> (result set of CONTACT1)

1 个答案:

答案 0 :(得分:0)

您的存储过程应如下所示:

CREATE PROCEDURE gr_fulltextsearch 
  @query nvarchar(100) 
AS
  SELECT * FROM CONTACT1 WHERE CONTAINS(COMPANY, @query)
GO

如果您使用(n)varchar,它将被解释为(n)varchar(1),因此您的所有过程和CONTAINS获取都是'“',因此错误消息!您应该将值100调整为某个值,即更适合您的需求。

看,一点也不令人失望! : - )