将数据从一个表导入另一个表

Geo*_*ge2 1 sql t-sql sql-server sql-server-2008

我正在使用SQL Server 2008 Enterprise.我需要将所有数据从服务器/实例"Server Foo",数据库"Foo"和表"Foo"导入目标服务器/实例"Server Goo",数据库"Goo"和表"Goo".表Foo和Table Goo具有相同的模式.如果表Goo存在相同的行,我想将原始数据保存在Goo中,并且在Foo中输入导入行(表Foo和表Goo都有一个名为CustomerID的uniqueidentifier类型列,它充当主键和聚簇索引),喜欢忽略重复键.

我正在寻找简单可靠的方法来编写T-SQL来解决数据导出/导入问题.有参考样品吗?

编辑1:

我使用MERGE尝试了以下解决方案,但遇到了SQL Server Management Studio中的以下错误.有什么想法有什么不对?

更多信息:

LabTest1\SQLServer2008 =>服务器\实例名称; OrderDB => DB名称; dbo =>架构名称; 订单=>表名.

merge into [dbo].[Orders] as Target
using "LabTest1\SQLServer2008.OrderDB.dbo.Orders" as source
on target.Hash = source.Hash
when not matched then
INSERT     ([Hash]
           ,[Order]
           ,[Name]
           ,[CreationTime]
           ,[Description])
     VALUES
     (
     source.[Hash], source.[Order], source.[Name], source.[CreationTime], source.[Description]
     )
when MATCHED then
;
Run Code Online (Sandbox Code Playgroud)

错误信息:

消息102,级别15,状态1,行16''''附近的语法不正确.

乔治,提前谢谢

mar*_*c_s 8

在SQL Server 2008中,您可以在SQL Server Mgmt studio中编写Goo.Goo表的脚本,并告诉它还创建一个脚本以使用T-SQL INSERT语句插入所有数据.转到对象资源管理器,右键单击数据库,选择"任务>生成脚本",选择要为其生成数据插入语句的表,并确保在此处使用此选项:

替代文字http://i29.tinypic.com/37wgz.jpg

然后可以在其他服务器上运行这些内容以插入表内容.但是,在这种情况下,您必须自己处理插入可能存在的行.

另一方面,如果两个服务器位于同一网络上,您可以使用"链接服务器"功能并将源服务器链接到目标服务器,然后使用SQL Server 2008 MERGE语句从源中导入所有数据srever的表进入目标服务器.

在对象资源管理器中,转到"服务器对象",然后"链接服务器",右键单击"添加新链接服务器"以在两个服务器之间建立连接:

alt text http://i28.tinypic.com/2hgtrew.jpg

链接服务器后,一个简单的MERGE语句(SQL Server 2008中的新增功能)将允许您合并这两个表中的数据:

MERGE 
  INTO Goo.Goo as Target
  USING Foo.Foo.dbo.Foo as Source
  ON Source.ID = Target.ID
WHEN NOT MATCHED THEN
  INSERT (field1, field2, field3)
  VALUES (source.field1, source.field2, source.field3)  
WHEN MATCHED THEN
  -- do nothing
;
Run Code Online (Sandbox Code Playgroud)

在此处阅读有关新MERGE语句的更多信息:

或者在SQL Server 2008联机丛书中.