我正在尝试使用存储过程创建一个表,通过获取主题名称并使用与该主题名称关联的关键字和权重来确定如何对帖子进行排名,从而对帖子进行排名。我一直在尝试使用 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
在我看来,由于您传递搜索条件的方式,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;
此外,您可能需要传递“”引号。这里有一个类似的问题 https://stackoverflow.com/a/8430703/261997这展示了相同的概念。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)