我在数据库中有一个表,其中包含每月更新的物品成本。为了更新这些成本,我们让某人导出该表,在 Excel 中做一些魔术,然后将该表导入回数据库。我们正在运行 MSSQL 2005 并使用内置的 SQL Management Studio。问题是,当导入回表时,我们必须在导入之前删除所有记录,否则我们会收到错误。理想的情况是导入识别主键,然后更新记录,而不是尝试创建具有重复键的第二条记录 - 停止导入。我们试图获得的行为的最佳说明可以在以下位置找到http://sqlmanager.net/en/products/mssql/dataimport/documentation/hs2180.html更新或插入示例。使用内置工具可以实现这样的功能吗?还是我们必须使用第三方软件才能实现?
答案1
在 SQL Server 2008 中,您可以将数据放入新表中,并使用 MERGE 语句,以现有表为目标,以新表为源。
相反,您可能更愿意将其放入新表中,并使用旧方法将其用作源(不幸的是,使用了两个步骤):
UPDATE t SET col1 = s.col1, col2 = s.col2
FROM targetTable t
JOIN
newTable s
ON s.id = t.id ;
INSERT targetTable (columnlist)
SELECT s.col1, s.col2, ...
FROM sourceTable s
LEFT JOIN
targetTable t
ON s.id = t.id
WHERE t.id IS NULL;
请记住,如果您也尝试插入标识列,则可能需要在目标表上打开IDENTITY_INSERT。