按表功能排序

时间:2010-08-27 12:59:03

标签: c# sql-server-2005

为什么会出错?

CREATE FUNCTION [dbo].[seth] (@IdUrl BIGINT)
RETURNS TABLE
AS
RETURN(SELECT * FROM dbo.NetGraph ORDER BY IdUrl)

错误

Msg 1033, Level 15, State 1, Procedure seth, Line 4
The ORDER BY clause is invalid in views, inline functions, derived tables, subqueries, and common table expressions, unless TOP or FOR XML is also specified.

如何在C#数据表中按字段排序?

2 个答案:

答案 0 :(得分:4)

你可以做“SELECT * FROM dbo.seth(@your_value)ORDER BY IdUrl”

答案 1 :(得分:2)

  

ORDER BY子句在视图,内联函数,派生表,子查询和公用表表达式中无效,除非还指定了TOP或FOR XML

这是因为所有这些对象都是为了返回一个行集,可以进一步组合,查询或排序。在以前版本的SQL Server(例如2000)中,它允许您在其中一些(例如VIEW)中放置“ORDER BY”,特别是如果使用“TOP 100 PERCENT”闪避。然而,2005变得更聪明,所以即使你在视图定义中有TOP 100 PERCENT,它也会忽略排序 - 因为它知道TOP 100 PERCENT是所有行,它不必执行排序来确定要返回的行。

基本上,纯粹表示目的的ORDER只能在最外层进行。