Stored procedures 如何使用存储过程输入参数进行全文搜索

Stored procedures 如何使用存储过程输入参数进行全文搜索,stored-procedures,full-text-search,sql-server-2012,Stored Procedures,Full Text Search,Sql Server 2012,也许我错过了显而易见的答案,但我花了一整天的时间在寻找这个问题的答案,几乎没有什么运气。也许我使用了不正确的搜索词?无论如何,这就是我要做的 我有一个设置了全文索引的表。当我运行以下操作时,我获得了预期结果: SELECT A.*, KEY_TBL.[Rank] FROM [dbo].[TableA] A INNER JOIN CONTAINSTABLE([dbo].[TableA], *, 'Jon OR Smith' ,5 ) AS KEY_TBL

也许我错过了显而易见的答案,但我花了一整天的时间在寻找这个问题的答案,几乎没有什么运气。也许我使用了不正确的搜索词?无论如何,这就是我要做的

我有一个设置了全文索引的表。当我运行以下操作时,我获得了预期结果:

SELECT
    A.*,
    KEY_TBL.[Rank]
FROM
[dbo].[TableA] A
INNER JOIN
    CONTAINSTABLE([dbo].[TableA], *, 'Jon OR Smith'
    ,5
    ) AS KEY_TBL
    ON A.[Id] = KEY_TBL.[Key]
ORDER BY
    KEY_TBL.[Rank] DESC
没问题。但是,我想做的是将“Jon或Smith”(或最终用户搜索的任何其他短语)作为存储过程的输入参数传递到查询中。但当我尝试以下方法时,我没有得到任何结果:

declare @search_phrase VARCHAR;
set @search_phrase = 'Jon OR Smith'

SELECT
    A.*
    KEY_TBL.[Rank]
FROM
[dbo].[TableA] A
INNER JOIN
    CONTAINSTABLE([dbo].[TableA], *, @search_phrase
    ,5
    ) AS KEY_TBL
    ON A.[Id] = KEY_TBL.[Key]
ORDER BY
    KEY_TBL.[Rank] DESC
我忍不住觉得我忽略了这里显而易见的东西。我试过做
SET@search\u phrase=N'Jon或Smith'
,但也没有结果。在SSMS中,我收到一条消息,说明“信息性:全文搜索条件包含噪声词”。虽然我认为这是因为是一个停止词,但我需要查询工作(不影响/关闭停止词)。我忍不住觉得这应该是很多人想做/已经做过的事情,但我还没有找到关于它的文章

应该注意的是,搜索短语中可能有一个或多个单词,我将在将完成的搜索短语发送到存储过程之前进行预处理,以添加必要的“或”


有人能指出我哪里出了错吗?

看起来是我,关于发布这个问题的类似建议让我找到了答案。对于遇到这种“奇怪”行为的任何其他人,您需要确保每个单词都单独双引号引用

declare @search_phrase VARCHAR(50);
set @search_phrase = N'"Jon" OR "Smith"'

SELECT
    A.*
    KEY_TBL.[Rank]
FROM
[dbo].[TableA] A
INNER JOIN
    CONTAINSTABLE([dbo].[TableA], *, @search_phrase
    ,5
    ) AS KEY_TBL
    ON A.[Id] = KEY_TBL.[Key]
ORDER BY
    KEY_TBL.[Rank] DESC