为什么不能在SQL Server存储过程中使用限制和偏移量
我试图使用下面的查询获取MAX-1记录,但若我在查询中使用LIMIT和OFFSET,则会抛出错误。是否有其他方法可以使用此查询获取Max-1行?我正在使用SQL Server为什么不能在SQL Server存储过程中使用限制和偏移量,sql,sql-server,Sql,Sql Server,我试图使用下面的查询获取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_cu
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);
SQL Server没有限制,您可以使用TOP或OFFSET和FETCH NEXT。如果要使用TOP,则不能使用偏移量从第二个结果或第三个结果开始。什么是MAX-1记录?示例数据和期望的结果非常有用。SQL Server中是否存在限制?可能您希望TOP.TOP在本例中不是一个选项,因为偏移忽略第一个结果,而TOP没有此选项。