我不是数据库人员(因为这个问题会显示)。我试图编写一个表值函数,我可以在ASP.NET Web应用程序中使用Linq To Sql。SQL Server 2008 - 使用多个关键字和分页进行全文搜索
假设我想搜索标题或摘要可能包含若干关键字(例如“澳大利亚历史”)的图书。
我想一次显示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大师可以指出我朝着正确的方向。