【问题标题】:Error Order by clause in sql server functionsql server函数中的错误Order by子句
【发布时间】:2015-12-30 04:05:22
【问题描述】:

我有 sql server 查询功能,可以连接到其他表,但我遇到了一些错误

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

    CREATE FUNCTION [dbo].[GetMutationUnGrouped]     
    (   
        -- Add the parameters for the function here
        @startDate Date, 
        @endDate Date,
        @PlaceId nvarchar(128)



    )
    RETURNS TABLE 
    AS
    RETURN (
        SELECT mut.*,inv.Barcode, itm.ItemName,plc.PlaceName,loc.ItemLocationName,sub.ItemSubLocationName,inv.BuyDate,inv.Cost,typ.TypeName

        FROM ItemInventoryMutation mut 
        JOIN ItemInventory inv ON mut.ItemInventoryId = inv.Id
        JOIN Items itm ON inv.itemId = itm.Id
        JOIN ItemTypes typ ON itm.ItemTypesId = typ.Id
        JOIN ItemSubLocations sub ON mut.ItemSublocationId = sub.Id
        JOIN ItemLocations loc ON sub.ItemLocationsId = loc.Id
        JOIN Place plc ON loc.PlaceId = plc.Id


        WHERE (inv.BuyDate >= @startDate AND inv.BuyDate <= @endDate) AND  (inv.itemId IS NOT NULL AND inv.IsDelete = 0) AND loc.PlaceId = @PlaceId
        ORDER BY mut.Id ASC, mut.MutationDate DESC

    )

是什么导致了错误?谢谢你

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:

    嗯,这正是错误消息所说的 - 除非您指定 TOP,否则您不能在返回表定义中使用 ORDER BY

    我猜你不想在这种情况下指定TOP,而是想返回所有记录。在这种情况下,您应该从 [dbo].[GetMutationUnGrouped] 函数返回未排序的记录,并在使用该函数时对其进行排序。

    您可以在MSDN找到更多信息:

    ORDER BY 子句在视图、内联函数、派生中无效 表和子查询,除非 TOP 或 OFFSET 和 FETCH 条款也被指定。在这些对象中使​​用 ORDER BY 时, 该子句仅用于确定 TOP 返回的行 子句或 OFFSET 和 FETCH 子句。 ORDER BY 子句不 保证查询这些结构时的有序结果,除非 查询本身也指定了 ORDER BY。

    因此,如果您想从您的函数中获取已排序的记录,那是行不通的 - 即使您在函数中指定了 TOP,您也必须再次订购记录。

    【讨论】:

      猜你喜欢
      • 2016-02-16
      • 1970-01-01
      • 2016-08-27
      • 1970-01-01
      • 2016-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-22
      相关资源
      最近更新 更多