[英]How can I write this Table Valued Function as a Stored Procedure?
我具有以下用於全文搜索的TVF:
FUNCTION [dbo].[Fishes_FullTextSearch]
(@searchtext nvarchar(4000), @limitcount int)
RETURNS TABLE
AS
RETURN
SELECT * FROM Fishes
INNER JOIN CONTAINSTABLE(Fishes, *, @searchtext, @limitcount)
AS KEY_TBL ON Fishes.Id = KEY_TBL.[KEY]
當我使用此TVF時,它不會返回Fish類型的對象的集合(我想要!)-LINQ會創建一個新的結果類型,其中包括所有“ Fish”字段以及Key和Rank字段。
在另一個問題中,建議我將這個TVF重寫為存儲過程,使其僅返回Fish對象。 有人可以幫我嗎? 另外,還需要按等級排序。
編輯: 我只需要類型“魚”的對象,沒有關鍵或等級。 否則LINQ將創建一個新的返回類型,這對於我現有的代碼不容易使用。
謝謝!
你的意思是這樣嗎?
CREATE PROCEDURE [dbo].[Fishes_FullTextSearch]
@searchtext nvarchar(4000),
@limitcount int
AS
SELECT Fishes.* FROM Fishes
INNER JOIN CONTAINSTABLE(Fishes, *, @searchtext, @limitcount)
AS KEY_TBL ON Fishes.Id = KEY_TBL.[KEY]
ORDER BY KEY_TBL.[Rank]
更新 :(跟隨評論並更新為問題)
添加了order by子句,並將返回值限制為僅來自Fishes
。 假定Rank
是別名KEY_TBL
上的字段名稱。
好沒問題:
CREATE PROCEDURE [dbo].[Fishes_FullTextSearch]
@searchtext nvarchar(4000),
@limitcount int
AS
SELECT Fishes.*
FROM dbo.Fishes
INNER JOIN CONTAINSTABLE(Fishes, *, @searchtext, @limitcount) AS KEY_TBL
ON Fishes.Id = KEY_TBL.[KEY]
那應該返回相同的結果,作為存儲過程的結果集。
另外,還需要按等級排序。
CREATE PROCEDURE [dbo].[Fishes_FullTextSearch]
@searchtext nvarchar(4000),
@limitcount int
AS
SELECT Fishes.*
FROM Fishes
INNER JOIN CONTAINSTABLE(Fishes, *, @searchtext, @limitcount) AS KEY_TBL ON Fishes.Id = KEY_TBL.[KEY]
ORDER BY Fishes.Rank
編輯以評論為指導。
第一個問題的最簡單答案:變更
SELECT * FROM Fishes
至
SELECT Fishes.* FROM Fishes
Create Procedure dbo.Fishes_FullTextSearch
@searchtext nvarchar(4000)
, @limitcount int
AS
Select Fishes.Col1, Fishes.Col2, ...
From dbo.Fishes
Join ContainsTable(Fishes, *, @searchtext, @limitcount) AS FreeTextTable
On Fishes.Id = FreeTextTable.Key
Order By FreeTextTable.Rank
您不應使用Select *
,而應枚舉所需的列。 因此,如果你只是想從列Fishes
表,只能從指定的列Fishes
在SELECT子句中的表。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.