SQL 导入来更新现有记录吗?

SQL 导入来更新现有记录吗?

我在数据库中有一个表,其中包含每月更新的物品成本。为了更新这些成本,我们让某人导出该表,在 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。

相关内容