如何插入sql并跳过已经存在的内容?

时间:2019-01-10 13:49:51

标签: sql sql-server

我正在尝试复制表中的记录,并且新记录具有新的CompanyID,其他所有内容都相同。一些记录已经存在,导致我的脚本无法运行。如何跳过已经存在的记录?

SELECT * INTO #TempTable FROM UserRole WHERE 
CompanyID = @oldComp;
ALTER TABLE #TempTable DROP COLUMN id;
UPDATE #TempTable SET CompanyID = @newComp;
INSERT INTO UserRole SELECT * FROM #TempTable;
DROP TABLE #TempTable;

3 个答案:

答案 0 :(得分:4)

为什么不只使用UPDATE语句:

UPDATE UserRole 
     SET CompanyID = @newComp
WHERE CompanyID = @oldComp;

编辑::如果要插入新记录,请使用NOT EXISTS

INSERT INTO UserRole (col1, col2, . . .) 
     SELECT t.col1, t.col2, . . . 
     FROM #TempTable t
     WHERE NOT EXISTS (SELECT 1 FROM UserRole U WHERE u.col = t.col);

答案 1 :(得分:2)

我不知道所有的列名是什么,但是如果您愿意/能够列出它们,那么也许可以在这里做一个简单的Base

Derived

如果新公司ID可能已经出现在某些记录中,并且您希望避免在其他所有列中插入可能具有相同值的新记录,则在上述查询中添加一个INSERT INTO ... SELECT子句:

INSERT INTO UserRole (CompanyID, col1, col2, col3)
SELECT @newComp, col1, col2, col3
FROM UserRole
WHERE CompanyID = @oldComp;

答案 2 :(得分:1)

尝试一下:

Base const* pb = static_cast<Base const *>(p);
Derived const *pd = static_cast<Derived const*>(pb);

以下SELECT * INTO #TempTable FROM UserRole WHERE CompanyID = @oldComp; ALTER TABLE #TempTable DROP COLUMN id; UPDATE #TempTable SET CompanyID = @newComp; INSERT INTO UserRole SELECT * FROM #TempTable EXCEPT SELECT * FROM UserRole DROP TABLE #TempTable; 语句:

EXCEPT

将为您提供SELECT * FROM #TempTable EXCEPT SELECT * FROM UserRole 中目标表中不存在的所有记录。