我有连接到其他表的SQL服务器查询功能,我有一些错误
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
)
导致错误的原因是什么?谢谢
答案 0 :(得分:1)
嗯,这正是错误消息所说的内容 - 除非指定ORDER BY
,否则不能在返回表定义中使用TOP
。
我猜你不想在这种情况下指定TOP
并希望返回所有记录。在这种情况下,您应该从[dbo].[GetMutationUnGrouped]
函数返回未订购的记录,并在使用该函数时对它们进行排序。
您可以在MSDN找到更多信息:
ORDER BY子句在视图,内联函数中派生无效 表和子查询,除非是TOP或OFFSET和FETCH 条款也被指定。在这些对象中使用ORDER BY时 该子句仅用于确定TOP返回的行 子句或OFFSET和FETCH子句。 ORDER BY子句没有 保证在查询这些结构时的有序结果,除非 ORDER BY也在查询本身中指定。
因此,如果您想从您的函数中获取有序记录,那将无法工作 - 即使您在函数中指定了TOP
,也必须再次订购记录。