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

时间:2009-08-05 07:54:11

标签: sql sql-server tsql 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 =>数据库名称; 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
;

错误讯息:

Msg 102,Level 15,State 1,Line 16 ';'附近的语法不正确。

提前谢谢, 乔治

3 个答案:

答案 0 :(得分:8)

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

alt text

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

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

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

alt text

链接服务器后,一个简单的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联机丛书中。

马克

答案 1 :(得分:1)

如果您使用的是SQL Server企业版,那么为什么使用原始T-SQL代码会让您的项目变得困难?

您可以使用SQL Server Integration Services(SSIS)以更简单,更健壮的方式实现您的目标,这是一项专门用于执行ETL任务的技术,当然也包含在您的SQL Server版本中。

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

你想要实现的目标可以通过纯粹的T-SQL编码实现,但是你会在这个过程中让自己的生活变得更加困难,在我看来,最终的解决方案很可能很麻烦而且不那么优雅。

答案 2 :(得分:0)

对于我遇到类似问题时,我只是从SQL Server Management Studio输出窗口复制数据并将其粘贴到Excel文件中,然后使用此工具将数据导入另一个数据库:

http://www.codeproject.com/KB/database/Excel2Sql.aspx