Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 将数据从一个表导入到另一个表_Sql_Sql Server_Tsql_Sql Server 2008 - Fatal编程技术网

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

Sql 将数据从一个表导入到另一个表,sql,sql-server,tsql,sql-server-2008,Sql,Sql Server,Tsql,Sql Server 2008,我正在使用SQLServer2008企业版。我需要将所有数据从服务器/实例服务器Foo、数据库Foo和表Foo导入目标服务器/实例服务器Goo、数据库Goo和表Goo。表Foo和表Goo具有相同的模式。如果表Goo中存在相同的行,我希望将原始数据保留在Goo和INGOR中,因为Foo表Foo和表Goo中的导入行都有一个名为CustomerID的uniqueidentifier类型列,它充当主键和聚集索引,就像忽略重复键一样 我正在寻找简单可靠的方法来编写T-SQL以解决数据导出/导入问题。有参考

我正在使用SQLServer2008企业版。我需要将所有数据从服务器/实例服务器Foo、数据库Foo和表Foo导入目标服务器/实例服务器Goo、数据库Goo和表Goo。表Foo和表Goo具有相同的模式。如果表Goo中存在相同的行,我希望将原始数据保留在Goo和INGOR中,因为Foo表Foo和表Goo中的导入行都有一个名为CustomerID的uniqueidentifier类型列,它充当主键和聚集索引,就像忽略重复键一样

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

编辑1:

我使用MERGE尝试了以下解决方案,但遇到了来自SQLServerManagementStudio的以下错误。你知道怎么了吗

更多信息:

LabTest1\SQLServer2008=>Server\Instance name; OrderDB=>DB名称; dbo=>schema名称; 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
;
错误消息:

Msg 102,15级,状态1,第16行 “;”附近的语法不正确

提前感谢,,
George

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

然后可以在另一台服务器上运行这些操作以插入表内容。然而,在这种情况下,您必须自己处理插入可能存在的行

另一方面,如果两台服务器位于同一网络上,则可以使用“链接服务器”功能将源服务器链接到目标服务器,然后使用SQL Server 2008 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
;
请在此处阅读有关新合并语句的更多信息:

或者在SQLServer2008联机丛书中


Marc

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

然后可以在另一台服务器上运行这些操作以插入表内容。然而,在这种情况下,您必须自己处理插入可能存在的行

另一方面,如果两台服务器位于同一网络上,则可以使用“链接服务器”功能将源服务器链接到目标服务器,然后使用SQL Server 2008 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
;
请在此处阅读有关新合并语句的更多信息:

或者在SQLServer2008联机丛书中


Marc

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

通过使用SSIS,您可以以更简单、更健壮的方式实现目标,SSIS是一种专门设计用于执行ETL任务的技术,当然也包含在您的SQL Server版本中

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


您希望实现的目标可以通过纯T-SQL编码来实现,但是在这个过程中,您将使自己的生活更加困难,在我看来,最终的解决方案将是,最有可能是繁琐和不那么优雅。

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

通过使用SSIS,您可以以更简单、更健壮的方式实现目标,SSIS是一种专门设计用于执行ETL任务的技术,当然也包含在您的SQL Server版本中

预先构建的组件已经存在,可以按照您希望的方式处理数据,并且您还可以轻松地将审核和日志功能合并到您的解决方案中< /p>
您希望实现的目标可以通过纯T-SQL编码来实现,但是在这个过程中,您会让自己的生活变得更加困难,在我看来,最终的解决方案很可能会很麻烦,也不那么优雅。

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


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


谢谢Marc,对于链接服务器,我如何在新建链接服务器向导中填写链接服务器值?我尝试输入计算机名,但失败。您是否在“新建链接服务器/常规”页面上选择了SQL Server选项?只需输入要链接到的SQL Server实例的名称。在向导的其他页面上,您可能还需要指定连接到该服务器实例的凭据Hanks Marc,如果我的源服务器名称是foo,实例名称是fooinstance,我应该输入foo\fooinstance?您推荐的凭据设置是什么?是的,输入foo\fooinstance-应该可以。至于证书,那完全取决于你。要么使用你现有的帐户,例如应用程序连接到数据库的帐户,要么创建一个特定的帐户-无论什么对你有用,然后删除匹配时的行,然后全部删除-如果源条目和目标条目匹配,你就什么都不做了,对吗?您可以在此处发出更新语句谢谢Marc,对于链接服务器,如何在新建链接服务器向导中填写链接服务器值?我尝试输入计算机名,但失败。您是否在“新建链接服务器/常规”页面上选择了SQL Server选项?只需输入要链接到的SQL Server实例的名称。在向导的其他页面上,您可能还需要指定连接到该服务器实例的凭据Hanks Marc,如果我的源服务器名称是foo,实例名称是fooinstance,我应该输入foo\fooinstance?您推荐的凭据设置是什么?是的,输入foo\fooinstance-应该可以。至于证书,那完全取决于你。要么使用你现有的帐户,例如应用程序连接到数据库的帐户,要么创建一个特定的帐户-无论什么对你有用,然后删除匹配时的行,然后全部删除-如果源条目和目标条目匹配,你就什么都不做了,对吗?您可以在此处发出UPDATE语句,然后删除匹配时的行,然后一起删除-如果源条目和目标条目匹配,您不会做任何事情,对吗?您可以在此处发出UPDATE语句,然后删除匹配时的行,然后一起删除-如果源条目和目标条目匹配,您不会做任何事情,对吗?您可以在此发出更新语句。您好,无法打开SSIS URL:-您好,John,无法打开SSIS URL:-