【发布时间】:2020-12-31 07:10:58
【问题描述】:
我正在寻找一个 SQL 查询,我必须根据 2 个条件的组合从表中删除数据。
我有一个表 dbo.ABC,如果值组合作为 A 列和 B 列中的输入传递,我必须从中删除行。
表格 - ABC
column A column B
===========================
100 US
200 IND
现在如果 A 列是 100 而 B 列是 US,我必须删除记录。但我想将多个输入(如 100 和 200)分别作为 A 列和 US 和 IND 作为 B 列。 100 和 US 将是删除第一条记录的一个组合,而 200 和 IND 将是另一个删除第二条记录的组合。同样,我想像这样传递 1000 个输入以单次删除 1000 条记录,而不是单次输入调用 1000 次。
column_A 和 column_B 有多个组合,我可以使用多个 IN 语句删除数据吗?
如果我通过column_A和column_B的多个组合,如何使用for循环删除数据?
我是这个领域的新手,所以知识不多。
您的帮助将不胜感激..
谢谢。
【问题讨论】:
-
请通过添加一些示例输入和输出数据来澄清您的问题。
-
您可以将所有记录组合添加到像物理表这样的暂存中,然后将表与您的实际表连接起来并删除匹配的记录
-
并且,不要在单个进程中删除大量记录。改为使用 Nibbling Delete。 (即:一次执行一个循环并删除 10000 条记录,....(这取决于您的并发工作量)
-
@SQLServerBuddy:因为当您尝试删除 超过5000 行 在单个事务中,我建议您的批次一次小于 5000 行,以避免长时间锁定整个表 ....
-
@marc_s 是的!根据并发进程和锁管理器的行为方式,这批记录可能会因环境而异。
标签: sql sql-server query-optimization sql-delete