【发布时间】:2017-06-07 08:49:08
【问题描述】:
我有一个表 TableA,它的 PK 是 AId。我有另一个表 TableB,它唯一的列是 BId。 BId 实际上是 AId 的一个子集。现在,我们不能使用 FK(因为这个和那个原因)。
如何删除表B中的TOP 1000行以及表A中与其相关的行(如果表A中存在相同的id)?
一种解决方法是从tableB中SELECT TOP 100)并保存到临时表中,然后用它来删除表A中的数据,然后删除表B中的行。
但它应该有更有效的方法来做到这一点。
我也试过了:
DELETE TOP (1000) FROM tableA WHERE AId IN (SELECT BId FROM TableB)
但是如何确保前 1000 个 BId 被删除?
谢谢
【问题讨论】:
-
我估计有两个删除步骤,我不知道任何其他方法.. 所以从 TABLEA 中删除(从 TABLEB 中选择前 1000 个键)...从 TABLEB 中删除(选择TOP 1000 KEY FROM TABLEB) ...前提是 tableB 在接下来的一两分钟内保持不变。否则#temptables 应该是要走的路
-
没有订单不能保证TOP返回同组数据。
标签: sql sql-server