簡體   English   中英

為什么我不能在 SQL Server 存儲過程中使用 LIMIT 和 OFFSET

[英]why I'm not able to use LIMIT and OFFSET in SQL Server stored procedure

我正在嘗試使用以下查詢獲取 MAX - 1 條記錄,但如果我在查詢中使用LIMITOFFSET ,則會引發錯誤。 任何其他方式都可以使用此查詢來獲取 Max - 1 行? 我正在使用 SQL Server

UPDATE [dbo].[ORDER_DETAIL] 
SET LINE_STATUS_CODE = 'C' 
WHERE RATE_STRUCTURE = 'LIST' 
  AND RATE_CODE = 'PRIMARY' 
  AND SHIP_MASTER_CUSTOMER_ID = @ip_master_customer_id  
  AND [ORDER_NO] = @ip_order_id 
  AND ORDER_LINE_NO = (SELECT ORDER_LINE_NO 
                       FROM [dbo].[ORDER_DETAIL] 
                       WHERE RATE_STRUCTURE = 'LIST' 
                         AND ORDER_NO = @ip_order_id 
                         AND SHIP_MASTER_CUSTOMER_ID = @ip_master_customer_id 
                       LIMIT 1 OFFSET 1 
                       ORDER BY ORDER_LINE_NO DESC)

如果我理解正確,根據您設置的匹配和過濾條件,您想要類似於Order_Detail倒數第二個記錄的內容:

UPDATE od
    SET LINE_STATUS_CODE ='C'
    FROM (SELECT od.*, ROW_NUMBER() OVER (ORDER BY ORDER_LINE_NO DESC) as seqnum
          FROM [dbo].[ORDER_DETAIL] od
          WHERE RATE_STRUCTURE = 'LIST' AND RATE_CODE= 'PRIMARY' AND
                SHIP_MASTER_CUSTOMER_ID = @ip_master_customer_id  AND 
                [ORDER_NO] = @ip_order_id 
        ) od
    WHERE seqnum = 2;

這是您應該用於內部選擇的確切語法:

SELECT ORDER_LINE_NO 
FROM [dbo].[ORDER_DETAIL] 
WHERE RATE_STRUCTURE = 'LIST' 
AND ORDER_NO = @ip_order_id 
AND SHIP_MASTER_CUSTOMER_ID = @ip_master_customer_id 
ORDER BY ORDER_LINE_NO DESC
OFFSET 1 ROW
FETCH NEXT 1 ROW ONLY

然后你的更新語句將是這樣的:

UPDATE [dbo].[ORDER_DETAIL] SET LINE_STATUS_CODE ='C' 
WHERE RATE_STRUCTURE = 'LIST' 
AND RATE_CODE= 'PRIMARY' 
AND SHIP_MASTER_CUSTOMER_ID = @ip_master_customer_id
AND [ORDER_NO] = @ip_order_id  
AND ORDER_LINE_NO = (SELECT ORDER_LINE_NO 
                     FROM [dbo].[ORDER_DETAIL] 
                     WHERE RATE_STRUCTURE = 'LIST' 
                     AND ORDER_NO = @ip_order_id  
                     AND SHIP_MASTER_CUSTOMER_ID = @ip_master_customer_id
                     ORDER BY ORDER_LINE_NO DESC
                     OFFSET 1 ROW
                     FETCH NEXT 1 ROW ONLY);

這是一個小演示

PS SQL Server 沒有LIMIT ,您可以將TOPOFFSETFETCH NEXT 如果要使用 TOP,則不能使用偏移量從第二個結果或第三個結果開始。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM