gpt4 book ai didi

sql - 如何在没有 key 的情况下删除插入的记录?

转载 作者:行者123 更新时间:2023-12-05 08:15:55 25 4
gpt4 key购买 nike

我有 2 个表:Tags 和 TagsTemp。

Tags 有数百万行,而 TagsTemp 有数千行。

它们都是物理表。

两个表的Primary Key都是ID,而且是Auto ID(所以ID的编号不同,不匹配)。

我必须将所有数据从 TagsTemp 移动到 Tags。

这很简单。我这样做了:

BEGIN TRANS
INSERT INTO Tags (C1, C2, C3)
SELECT C1, C2, C3 FROM TagsTemp

DELETE FROM TagsTemp

COMMIT

问题是 TagsTemp 在此事务期间(插入和删除语句之间的时间)可能有新记录。

我不想删除包含未插入记录的表。

我在想这样的事情:

BEGIN TRANS
INSERT INTO @T (ID, C1, C2, C3)
SELECT ID, C1, C2, C3 FROM TagsTemp

INSERT INTO Tags (C1, C2, C3)
SELECT C1, C2, C3 FROM @T

DELETE FROM TagsTemp
WHERE ID IN (SELECT ID FROM @T)

COMMIT

但这似乎不是最好的方式,而且性能不佳。

有没有更好的解决方案?

注意:我无法更改表结构。

最佳答案

对于几千行,我认为你的解决方案非常好,但只是为了让你知道另一种方法,你可以从表中获取 MAX(ID) 然后使用它,假设你自动 ID 是递增的整数:

BEGIN TRAN;

DECLARE @MaxId INT;

SELECT @MaxId = MAX(ID) from TagsTemp;

INSERT INTO Tags (C1, C2, C3)
SELECT C1, C2, C3
FROM TagsTemp
WHERE ID <= @MaxId;

DELETE
FROM TagsTemp
WHERE ID <= @MaxId;

COMMIT;

PS:不确定您的END TRANS - 我假设您的意思是COMMIT

关于sql - 如何在没有 key 的情况下删除插入的记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65367097/

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