2015-12-30 37 views
0

我有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 

    ) 

是什麼原因造成的錯誤?謝謝

回答

1

嗯,這正是錯誤信息所說 - 你不能在你的返回表定義中使用ORDER BY,除非你指定TOP

我猜你不想在這種情況下指定TOP並希望返回所有記錄。在這種情況下,您應該從[dbo].[GetMutationUnGrouped]函數返回沒有訂購的記錄,並在使用該函數時對其進行訂購。

你可以找到更多的信息上MSDN

ORDER BY子句是不是在視圖中有效,內聯函數,派生 表和子查詢,除非是TOP或OFFSET和FETCH 條款也指定。當在這些對象中使​​用ORDER BY時,該子句僅用於確定TOP 子句或OFFSET和FETCH子句返回的行。當查詢這些結構時,ORDER BY子句不會保證排序結果,除非 ORDER BY也在查詢本身中指定。

所以,如果你想從你的函數命令的記錄,這是行不通的 - 你將不得不再次反正訂單記錄,即使你在你的函數指定TOP