2009-08-05 53 views
1

我正在使用SQL Server 2008 Enterprise。我需要将Server/Instance“Server Foo”,Database“Foo”和表“Foo”中的所有数据导入到目标服务器/实例“Server Goo”,数据库“Goo”和表“Goo”中。 Table Foo和Table Goo具有相同的架构。如果表Goo存在同一行,我想将原始数据保存在Goo中,并在Foo中引入导入行(表Foo和表Goo都有一个名为CustomerID的唯一标识符类型列,它充当主键和聚簇索引),只是像忽略重复键那样。将数据从一个表导入另一个表

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

编辑1:

我曾尝试用MERGE下面的解决方案,但遭到了SQL Server Management Studio中下面的错误。任何想法有什么不对?

一些更多信息:

LabTest1 \ SQLServer2008的=>服务器\实例名; OrderDB => DB名称; dbo =>模式名称; Orders =>表名。

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 
; 

错误消息:

消息102,级别15,状态1,行16 附近有语法错误 ';'。

由于事先 乔治

+1

然后只是将WHEN MATCHED THEN行全部删除 - 如果源和目标条目匹配,则不做任何事情,对吧?您可以在这里发布UPDATE语句 – 2009-08-05 11:17:44

回答

8

在SQL Server 2008中,你可以在SQL Server管理工作室脚本你的Goo.Goo表,并告诉它也创建脚本中使用T-SQL插入所有数据INSERT声明。走在对象资源管理器在数据库上,单击右键,选择“任务>生成脚本”,选择要生成的数据插入语句表,并确保使用此选项在这里:

alt text 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 
; 

了解更多关于此新的MERGE语句:

或SQL Server 2008联机丛书英寸

马克

+0

感谢Marc,对于链接服务器,我如何填充“新链接服务器”向导中的“链接服务器”值?我试图输入机器名称,但失败了。 – George2 2009-08-05 09:02:20

+1

您是否在“新链接服务器/常规”页面上选择了“SQL Server”选项?只需输入要链接到的SQL Server实例的名称即可。在向导的其他页面上,您可能还需要指定凭据以连接到该服务器实例 – 2009-08-05 09:23:58

1

如果您正在使用的SQL Server企业版,那么为什么使用原始的T-SQL代码,使您的项目很难为自己?

您可以通过使用SQL Server Integration Services(SSIS),一种专门设计用于执行ETL任务的技术,并且当然包含在您的SQL Server版本中,以更简单,更健全的方式实现目标。

预构建组件已经存在,可以按照您希望的方式处理数据,而且您还可以轻松地将审计和日志记录功能合并到您的解决方案中。

您希望通过纯粹的T-SQL编码来实现您的目标,然而您会在此过程中让自己的生活变得更加困难,并且在我看来,最终的解决方案很可能会很麻烦并且不太优雅。

相关问题