gpt4 book ai didi

c# - SQL Server 2008 - 使用多个关键字和分页的全文搜索

转载 作者:行者123 更新时间:2023-12-02 19:43:00 24 4
gpt4 key购买 nike

我不是数据库专家(正如这个问题所示)。我正在尝试编写一个表值函数,可以在 ASP.NET Web 应用程序中与 Linq To Sql 一起使用。

假设我想搜索标题或摘要可能包含多个关键字的书籍(例如“澳大利亚历史”)。

我想一次显示 x 个结果,因此我需要能够告诉我的函数“跳过”和“获取”一定数量的记录。

某些图书可能被标记为“已删除”。我不想退回这些。

这是我到目前为止所拥有的:

CREATE FUNCTION SearchBooks
(
@keywords nvarchar(50),
@skip int,
@take int
)
RETURNS TABLE
AS
RETURN
(
SELECT TOP (@take)
ROW_NUMBER() OVER (ORDER BY MyFTS.RANK DESC) AS RowID,
MyFTS.RANK as Relevance,
[ID],
[Title],
[Summary]
FROM [Book]
JOIN CONTAINSTABLE ([Book], ([Title], [Summary]), @keywords, @take) AS MyFTS ON MyFTS.[KEY] = [Book].[ID]
WHERE ([Book].[Deleted] = 0)
AND (MyFTS.[RowID] BETWEEN (@skip + 1) AND (@skip + @take))
ORDER BY MyFTS.RANK DESC
)

当我尝试创建此函数时,SSMS 给出错误“无效的列名 'RowID'”。

我想我还需要获取匹配记录的总数,以便我可以设置分页?

我希望你们中的一位 SQL 专家能够为我指明正确的方向。

最佳答案

您不能在 WHERE 子句中引用列别名 - 使用内联 View /派生表:

  SELECT x.rowid,
x.relevance,
x.id,
x.title,
x.summary
FROM (SELECT TOP (@take)
ROW_NUMBER() OVER (ORDER BY MyFTS.RANK DESC) AS RowID,
MyFTS.RANK as Relevance,
[ID],
[Title],
[Summary]
FROM [Book] b
JOIN CONTAINSTABLE ([Book], ([Title], [Summary]), @keywords, @take) AS MyFTS ON MyFTS.[KEY] = b.id
WHERE b.[Deleted] = 0) AS x
WHERE x.[RowID] BETWEEN (@skip + 1) AND (@skip + @take))
ORDER BY x.relevance DESC

关于c# - SQL Server 2008 - 使用多个关键字和分页的全文搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7775592/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com