sql - 如何循环一次删除一行
问题描述
我想知道是否有一种方法可以重组以下 SQL,以便一次删除一行,而不是在一次批量操作中执行删除?原因是删除操作导致该表上的触发器执行,并且(在 USER_ID 有超过 1 行的情况下)试图将数据插入到另一个表中,该表具有日期时间戳作为键并且同时(到毫秒)正在尝试插入并导致重复键插入错误。
DELETE ORDERS
FROM LINE_ORDER ORDERS
INNER JOIN LINE_ORDER_XREF B ON B.OPRID = ORDERS.USER_ID
WHERE B.USERID = 'SYSACCT'
当时的想法是,如果将每一行作为自己的事务单独删除,那么这将使每个日期时间戳记都是唯一的。在这种情况下,删除操作的数量将很少,额外的处理时间不是问题。是否可以构建一些循环或使用游标?LINE_ORDER
(USER_ID
和) 中的主 ID 列USER_ROLE
是 varchar 列,所以我不相信我可以增加它。
USER_ID USER_ROLE DYNAMIC_SW
11000_600 E_SAML N
11000_602 E_SAML N
11000_602 SUPRV N
11000_604 E_PRO N
11000_605 E_SAML N
解决方案
好吧,您可以TOP
为此目的使用:
DELETE o
FROM (SELECT TOP (1) o.*
FROM LINE_ORDER o INNER JOIN
LINE_ORDER_XREF lox
ON lox.OPRID = o.USER_ID
WHERE lox.USERID = 'SYSACCT'
) o;
然后,您需要将其嵌入循环中以删除所有匹配值。
推荐阅读
- javascript - 从 XMLHttpRequest() 访问所有 ResponseHeaders
- sql - 如何在 Visual Studio 代码中创建数据库图表?
- reactjs - 以 pdf 格式下载一个反应组件
- html - 悬停时不显示 Div
- spotfire - 列总计算百分比
- c# - ITextSharp SetFieldPropertyy,顶部自动换行和垂直对齐
- java - 无法将响应反序列化为 RestTemplate 中的类
- javascript - 闭包/对象组合调查:为什么第一个断点只命中一次,而闭包范围内的断点被重复命中?
- pandas - Koalas GroupBy > Apply > Lambda > 系列
- ios - SwiftUI 成功后自动转到下一个视图