3

ストアド プロシージャを使用して、トピック名を取得し、そのトピック名に関連付けられたキーワードと重みを使用して投稿をランク付けする方法を決定することにより、投稿をランク付けするテーブルを作成しようとしています。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
4

1 に答える 1

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;

さらに、"" 引用符を渡す必要がある場合があります。これは、同じ概念を示す同様の質問です。

于 2012-10-13T23:27:01.387 に答える