使用ISABOUT当我可以使用一个变量?(Can I use a variable when usi

2019-09-24 02:37发布

我试图用一个存储过程创建,通过采取一个主题名称和使用带有该主题名称相关联的关键词和权重,以确定他们应如何排名居职位表。 我一直在尝试使用CONTAINSTABLE和ISABOUT,但我有与把关键字和重量成ISABOUT声明麻烦。 我试着转换的关键字和权重,从他们在为一个varchar变量表,并把该变量为ISABOUT声明,但是当我运行SP,结果表是空的,所以我假设变量不工作,我不知道在哪里可以从这里走。

这是我到目前为止有:

CREATE PROCEDURE rankingSP (@Topic varchar(30))
AS
BEGIN
    --creates table to display when sp is executed  
    CREATE TABLE #rankingTable(
    Post_ID     int,
    Post_cont   varchar(max),
    [Rank]      decimal(18,2))

    --creates string with keywords and weights
    DECLARE @keywordString varchar(max)
    SELECT @keywordString = COALESCE(@keywordString + ',','') 
    + Keyword + ' ' + 'WEIGHT' + '(' + CONVERT(varchar,K_weight) + ')'
    FROM Keyword
    PRINT @keywordString

    --inserts rankings into rankingTable
    INSERT INTO #rankingTable
    SELECT
    p.[Post_ID],
    p.[Post_cont],
    ct.[RANK]
    FROM CONTAINSTABLE
    (
    Post,
    Post_cont,
    N'ISABOUT (@keywordString)'
    ) ct
    INNER JOIN Post p
    ON ct.[KEY] = p.Post_ID
    ORDER BY ct.[RANK] DESC;

    --displays the ranking table
    SELECT * FROM #rankingTable
    ORDER BY [Rank]DESC
END

Answer 1:

在我看来,是因为你的方式通过SQL引擎不承认它是可变的,但只是一个字符串搜索条件。 它已经一段时间,因为我做了什么CONTAINSTABLE ,但我想,如果你尝试这样它应该工作。

--- snippet
FROM CONTAINSTABLE
(
 Post,
 Post_cont,
 N'ISABOUT (' + @keywordString + ')'
)
ct
INNER JOIN Post p
  ON ct.[KEY] = p.Post_ID
  ORDER BY ct.[RANK] DESC;

此外,您可能需要通过“”引号。 这里有一个类似的问题 ,演示了相同的概念。



文章来源: Can I use a variable when using ISABOUT?