SQL Server 2008 -全文搜索与多个关键字和分页
本文关键字:关键字 分页 搜索 2008 Server 文搜索 SQL | 更新日期: 2023-09-27 18:11:32
我不是一个数据库人(正如这个问题所示)。我试图写一个表值函数,我可以使用Linq Sql在我的ASP。. NET web应用程序
假设我想搜索标题或摘要可能包含多个关键词的书籍(例如"澳大利亚历史")。
我想一次显示x个结果,所以我需要能够告诉我的函数"跳过"answers"取"一定数量的记录。
有些书可能被标记为"已删除"。我不想退货。
到目前为止我写的是:
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子句中引用列别名-使用内联视图/派生表:
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
谢谢OMG小马-这正是我所追求的。我已经修改了这个函数,使它也返回匹配行的总数(TotalRows),现在我应该能够让分页工作。
CREATE FUNCTION SearchBooks
(
@keywords nvarchar(50),
@skip int,
@take int
)
RETURNS TABLE
AS
RETURN
(
SELECT TOP (@take) * FROM
(
SELECT TOP (@take)
ROW_NUMBER() OVER (ORDER BY MyFTS.RANK DESC) AS RowID,
COUNT(*) OVER(PARTITION BY 1) as TotalRows,
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
)