2011-06-30 83 views
2

我需要使用脚本将存储在一个表中的某些数据移动到另一个表中,同时考虑到可能已存在于目标表中的现有记录以及可能存在于存在。安全地将行数据从一个表插入到另一个表中 - SQL

我很想知道这样做的最佳方法,对性能的影响相对较小,必要时可以逆转。

起初我只会移动一条记录以确保流程顺利运行,但是它将负责移动1650行左右。

什么是最好的方法或有更好的选择?

编辑:

我以前使用合并,我会在SQL Server 2005环境下操作将无法正常工作的建议,而不是像2008年之前提到的。

回答

2

的问题并没有提供任何细节,所以我不能提供任何实际真正代码,只是这个计划攻击:

第1步编写一个查询,将只选择需要复制的行。您需要JOIN和/或过滤(WHERE)此数据以仅包含目标表中尚不存在的行。按列顺序和数据类型使列列表与列表中的列完全相同。

步骤2反过来由之前选择加入INSERT YourDestinationTable (col1, col2, col3..) SELECT语句入的插入件。

第3步,如果你只是想尝试单行,增加TOP 1INSERET - SELECT command的选择部分,您可以根据需要与重新运行此命令多次/无TOP,因为它应该消除任何您在JOIN■添加和WHERE条件到底SELECT

行,你得东西,看起来像:

INSERT YourDestinationTable 
     (Col1, Col2, Col3, ...) 
    SELECT 
     s.Col1, s.Col2, s.Col3, ... 
     FROM YourSourceTable    s 
      LEFT OUTER JOIN SomeOtherTable x ON s.Col4=x.Col4 
     WHERE NOT EXISTS (SELECT 1 FROM YourDestinationTable d WHERE s.PK=d.PK) 
      AND x.Col5='J' 

我读了一个问题,只将源表中缺失的行插入到目标表中。如果更改需要进行迁移,那么在执行上述步骤之前,您需要执行目标表的UPDATE加入源表。如果没有更具体的实际表格,栏目等,这很难解释。

+0

感谢您的信息KM! –

+0

要回答你的问题,我只会插入不存在的行,之后不需要使用类似的方法更新任何内容。 –

1

是,MERGE语句是理想的批量导入,如果你正在运行SQL Server 2008的

相关问题