我试图实现批量删除。 我发现在互联网上验证码:根据tableB上的数据从tableA批量删除
DECLARE @rowcount int = 1
WHILE (@rowcount != 0) BEGIN
DELETE T1
FROM (SELECT TOP (50) * FROM Orders WHERE OrderCity = @city) T1
SELECT @rowcount = @@ROWCOUNT
END
的想法是从@city删除所有订单
这似乎很好地工作,但在我的现实,我需要delete from Orders where OrderCity in (select ID from SomeOtherTable)
如果我尽量做同样的事情,但它需要花费很多时间,因为SomeOtherTable将包含大约150万行并且数据正在从主表中删除,所以它不会变小(它不包含城市,它的另一个东西)。
我也不能加入这两个表,因为它不会运行,说多个表会受到影响。
所以基本上我的问题是:反正是有一批从表A,其中tableA.ID IN(从tableB的选择ID)
如何使用CTE来选择SomeOtherTable所有ID(但只标识),然后通过内部与CTE加入从TableA中删除行?这样你就不会在两个表之间得到任何依赖关系。 –
您是否尝试“从someOtherTable中明确选择ID”,如“从someothertable选择不同的ID”? – Kaf
hi marceln。我用CTE得到相同的消息:视图或函数'T1'不可更新,因为修改会影响多个基表。 – Diego