我已经在几个不同的站点上阅读了有关此问题的信息,但我仍然不了解该解决方案。据我了解,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查询中。目前,这超出了我的能力范围。
如果添加标识字段是安全的解决方案,那么我很乐意这样做。这很简单。
该order by需求是在声明中说,从功能选择。
order by
SELECT CompetitionId FROM [dbo].fTest() ORDER BY CompetitionId
这是获得可靠结果的唯一方法,可以确保将来不会突然中断。