[英]why I'm not able to use LIMIT and OFFSET in SQL Server stored procedure
我正在嘗試使用以下查詢獲取 MAX - 1 條記錄,但如果我在查詢中使用LIMIT
和OFFSET
,則會引發錯誤。 任何其他方式都可以使用此查詢來獲取 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
,您可以將TOP
或OFFSET
與FETCH NEXT
。 如果要使用 TOP,則不能使用偏移量從第二個結果或第三個結果開始。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.