小编典典

在SQL表值函数中排序

sql

我已经在几个不同的站点上阅读了有关此问题的信息,但我仍然不了解该解决方案。据我了解,SQL将优化函数中的查询,有时Order
By子句将被忽略。您如何对结果进行排序?

如何在像这样的简单表值函数中对结果进行排序?

Create function [dbo].fTest

--Input Parameters
(@competitionID int)

--Returns a table
RETURNS @table TABLE (CompetitionID int )

as

BEGIN
    Insert Into @table (CompetitionID)
    select CompetitionID from Competition order by CompetitionID desc
    RETURN
END

更新

我发现插入主键标识字段似乎有帮助(正如在马丁·史密斯发布的答案中提到的那样)。这是一个好的解决方案吗?

--Returns a table
RETURNS @table TABLE
(
    SortID int IDENTITY(1,1) PRIMARY KEY,
    CompetitionID int 
)

关于下面马丁的回答,在我的情况下,在select语句之外进行排序并不是那么容易。我发布的示例是精简版,但我的现实生活中涉及到更复杂的“按案例排序”子句,以进行自定义排序。除此之外,我还在带有LINQ查询的MVC控制器中调用此函数,这意味着必须将自定义排序添加到LINQ查询中。目前,这超出了我的能力范围。

如果添加标识字段是安全的解决方案,那么我很乐意这样做。这很简单。


阅读 180

收藏
2021-05-16

共1个答案

小编典典

order by需求是在声明中说,从功能选择。

SELECT CompetitionId
FROM [dbo].fTest()
ORDER BY CompetitionId

这是获得可靠结果的唯一方法,可以确保将来不会突然中断。

2021-05-16