gpt4 book ai didi

sql - 一次删除表中的行

转载 作者:太空狗 更新时间:2023-10-30 01:58:41 26 4
gpt4 key购买 nike

我有一个单列表Ids,它的列ID是uniqueidentifier类型。我有另一个表 MyTable,它有一个 ID 列以及许多其他列。我想一次从 MyTable 中删除 1000 行,其中 MyTable 中的 ID 与 Ids 中的 ID 匹配。

WHILE 1 = 1 BEGIN
DELETE t FROM (SELECT TOP 1000 ID FROM Ids) d INNER JOIN MyTable t ON d.ID = t.ID;
IF @@ROWCOUNT < 1 BREAK;
WAITFOR DELAY @sleeptime; -- some time to be determined later
END

虽然这似乎不起作用。声明实际上应该是什么?

最佳答案

试试这个:

DECLARE @BatchSize INT
SET @BatchSize = 100000

WHILE @BatchSize <> 0
BEGIN
DELETE TOP (@BatchSize) t
FROM [MyTable] t
INNER JOIN [Ids] d ON d.ID=t.ID
WHERE ????
SET @BatchSize = @@rowcount
END

的好处是您需要创建的唯一变量是大小,因为它用于 WHILE 循环检查。当删除低于 100000 时,它会将变量设置为该数字,在下一次传递时将没有任何内容可删除,行数将为 0 ... 然后退出。干净、简单且易于理解。当 WHILE 可以解决问题时,切勿使用 CURSOR!

关于sql - 一次删除表中的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11319029/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com