所以我有一个简单的函数试图从数据库中获取两个字段。我正在尝试将order by用于结果,但是我不能在return子句中使用ORDER BY。 它告诉我
除非还指定了TOP,OFFSET或FOR XML,否则ORDER BY子句在视图,内联函数,派生表,子查询和公用表表达式中无效。
是否可以在RETURN语句中使用ORDER BY?我想避免在执行函数时使用order。
CREATE FUNCTION goalsGames1 () RETURNS TABLE
AS RETURN(
SELECT MAX(goals_scored) goals,
no_games
FROM Player
GROUP BY no_games
ORDER BY no_games DESC )
答案 0 :(得分:2)
跳过此错误的一种技巧是使用top
,如错误消息中所述:
CREATE FUNCTION goalsGames1 () RETURNS TABLE
AS RETURN(
SELECT Top 100 Percent MAX(goals_scored) goals,
no_games
FROM Player
GROUP BY no_games
ORDER BY no_games DESC )
答案 1 :(得分:2)
我希望在执行函数时避免使用order。
如果您正在使用该函数并希望结果按特定顺序排列,则需要使用ORDER BY
。
这在documentation中有明确说明:
执行SELECT查询时,ORDER子句不保证有序结果,除非查询中也指定了ORDER BY。
答案 2 :(得分:1)
在选择函数时使用order by
而不是在创建时使用
因此请在select * from goalsGames1 order by col
您的错误告诉您排序依据无效的地方
答案 3 :(得分:1)
您不能通过函数内部进行排序,其想法是对函数返回的结果集进行排序。
select *
from dbo.goalsGames1()
order by no_games
即使您要在函数内部按顺序进行排序,也不能保证在返回结果集时将保留该顺序。正在执行的查询(select * from functionname)
必须负责设置顺序,而不是功能或视图。
接收行的人是唯一可以对行进行排序的人,因此,在这种情况下,select * from goalsGames1()
是接收器,此查询必须对结果进行排序。