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