我正在尝试复制表中的记录,并且新记录具有新的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;
答案 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
中目标表中不存在的所有记录。