簡體   English   中英

如何將該表值函數編寫為存儲過程?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM