我在数据库中有一张表,其中包含每月更新的项目的成本。 为了更新这些成本,我们有人导出表,在Excel中做一些魔术,然后将表导回到数据库。 我们正在运行MSSQL 2005并使用内置的SQL Management Studio。 问题是,当重新导入表格时,我们必须在导入之前删除所有的logging,否则我们会得到错误。 理想的情况是导入识别主键,然后更新logging,而不是尝试使用重复键创build第二条logging – 暂停导入。 我们试图获取的行为的最佳例子可以在http://sqlmanager.net/en/products/mssql/dataimport/documentation/hs2180.html更新或插入示例中find。 这样的内置工具是可能的,还是我们必须得到第三方软件才能实现?
在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。