繁体   English   中英

将表数据从一个SQL Server导出到另一个SQL Server

[英]Export table data from one SQL Server to another

我有两个SQL Server(都是2005版)。

我想将几个表从一个表迁移到另一个表。

我试过了:

  • 在源服务器上,我右键单击了数据库,选择了Tasks/Generate scripts 问题是在Table/View options下没有Script data选项。

  • 然后我使用Script Table As/Create script生成SQL文件,以便在目标服务器上创建表。 但我仍然需要所有的数据。

然后我尝试使用:

SELECT * 
INTO [destination server].[destination database].[dbo].[destination table] 
FROM [source server].[source database].[dbo].[source table]

但我得到错误:

对象包含的前缀数量超过最大数量。 最大值为2。

有人可以指出我解决问题的正确方法吗?

试试这个:

  1. 使用“ Script Table As / Create Script步骤中的Script Table As / Create Script在目标服务器上创建表

  2. 然后,在目标服务器上,您可以发出T-SQL语句:

     INSERT INTO dbo.YourTableNameHere SELECT * FROM [SourceServer].[SourceDatabase].dbo.YourTableNameHere 

这应该工作得很好。

只是为了显示另一个选项(适用于SQL Server 2008及更高版本):

  1. 右键单击Database - >选择'Tasks' - >选择'Generate Scripts'
  2. 选择要复制的特定数据库对象。 假设有一个或多个表格。 点击下一步
  3. 单击“高级”并向下滚动到“脚本数据类型”,然后选择“架构和数据”。 单击确定
  4. 选择保存生成脚本的位置,然后单击“下一步”继续

在Tasks / Generate脚本中有脚本表选项! 我一开始也想念它! 但是你可以在那里生成插入脚本(非常好的功能,但在非常不直观的地方)。

当您进入“设置脚本选项”步骤时,请转到“高级”选项卡。

这里描述的步骤(图片可以理解,但我在拉脱维亚写)。

尝试使用SQL Server 导入和导出向导 (在任务 - >导出数据下)。

它提供了在目标数据库中创建表。 然而,正如您所见,脚本向导只能创建表结构。

如果已经使用脚本创建了表,那么通过使用BCP命令将所有数据从源服务器复制到目标服务器,还有另一种复制数据的方法

要将表数据导出到源服务器上的文本文件中:

bcp <database name>.<schema name>.<table name> OUT C:\FILE.TXT -c -t -T -S <server_name[ \instance_name]> -U <username> -P <Password> 

要从目标服务器上的文本文件导入表数据:

bcp <database name>.<schema name>.<table name> IN C:\FILE.TXT -c -t -T -S <server_name[ \instance_name]> -U <username> -P <Password>

只是为了踢。

由于我无法创建链接服务器,因为仅仅连接到生产服务器不足以使用INSERT INTO我执行了以下操作:

  • 创建了生产服务器数据库的备份
  • 在我的测试服务器上恢复了数据库
  • 执行插入到语句中

它是一个后门解决方案,但由于我遇到了问题,它对我有用。

由于我使用SCRIPT TABLE AS / CREATE创建了空表,以便传输所有键和索引,因此我无法使用SELECT INTO SELECT INTO仅在目标位置上不存在表但不复制键和索引时才有效,因此您必须手动执行此操作。 使用INSERT INTO语句的缺点是您必须手动提供所有列名称,如果某些外键约束失败,它可能会给您一些问题。

感谢所有的游戏,有一些很好的解决方案,但我决定接受marc_s anwser。

您无法选择源/目标服务器。

如果数据库位于同一服务器上,则可以执行以下操作:

如果表的列相等(包括订单!),那么你可以这样做:

INSERT INTO [destination database].[dbo].[destination table]
SELECT *
FROM [source database].[dbo].[source table]

如果要在备份/还原源数据库后执行此操作。 如果您需要更频繁地执行此操作,我建议您启动一个SSIS项目,您可以在其中定义源数据库(您可以在任何服务器上选择任何连接)并创建一个项目,您可以在其中移动数据。 在此处查看更多信息: http//msdn.microsoft.com/en-us/library/ms169917%28v=sql.105%29.aspx

它可以通过SQL Server Management Studio中的“导入/导出数据...”来完成

如果您没有链接服务器的权限,以下是使用Sql Server导入/导出向导将表从一个服务器导入另一个服务器的步骤:

  • 右键单击要从中复制的源数据库。
  • 选择任务 - 导出数据。
  • 在数据源中选择Sql Server Native Client。
  • 选择您的身份验证类型(Sql Server或Windows身份验证)。
  • 选择源数据库。
  • 接下来,选择Destination:Sql Server Native Client
  • 键入您的服务器名称(要将表复制到的服务器)。
  • 选择您的身份验证类型(Sql Server或Windows身份验证)。
  • 选择目标数据库。
  • 选择复制数据。
  • 从列表中选择您的表格。
  • 单击下一步,选择立即运行,或者,如果要稍后运行,还可以选择将程序包保存到文件或Sql Server。

用于将数据从源复制到目标:

use <DestinationDatabase>
select * into <DestinationTable> from <SourceDataBase>.dbo.<SourceTable>

这是一个解决方案,但它对我有用,我希望它也可以为其他人解决这个问题:

您可以在要导出的表上运行选择SQL查询,并将结果保存为驱动器中的.xls。

现在创建要添加包含所有列和索引的数据的表。 通过右键单击实际表并选择“创建到脚本”选项,可以轻松完成此操作。

现在,您可以右键单击要添加表的数据库,然后选择“任务”>“导入”。

“导入导出”向导将打开并选择“下一步”。选择Microsoft Excel作为输入数据源,然后浏览并选择之前保存的.xls文件。

现在选择目标服务器以及我们已创建的目标表。

注意:如果存在任何基于身份的字段,则在目标表中您可能希望删除标识属性,因为还将插入此数据。 因此,如果您只将此作为Identity属性,则会导致导入过程出错。

现在点击下一步并点击完成,它将显示正在导入的记录数,如果没有错误则返回成功。

如果你有它可用的另一种选择:c#.net。 特别是Microsoft.SqlServer.Management.Smo命名空间。

我在我的一个SSIS包的脚本组件中使用类似于以下的代码。

var tableToTransfer = "someTable";
var transferringTableSchema = "dbo";

var srvSource = new Server("sourceServer");
var dbSource = srvSource.Databases["sourceDB"];

var srvDestination = new Server("destinationServer"); 
var dbDestination = srvDestination.Databases["destinationDB"];

var xfr = 
    new Transfer(dbSource) {
        DestinationServer = srvDestination.Name,
        DestinationDatabase = dbDestination.Name,
        CopyAllObjects = false,
        DestinationLoginSecure = true,
        DropDestinationObjectsFirst = true,
        CopyData = true
    };

xfr.Options.ContinueScriptingOnError = false; 
xfr.Options.WithDependencies = false; 

xfr.ObjectList.Add(dbSource.Tables[tableToTransfer,transferringTableSchema]);
xfr.TransferData();

我想我必须显式搜索并将Microsoft.SqlServer.Smo库添加到引用。 但除此之外,这一直在为我而努力。

更新 :命名空间和库比我记忆中的更复杂。

对于库,添加对以下内容的引用

  • Microsoft.SqlServer.Smo.dll
  • Microsoft.SqlServer.SmoExtended.dll
  • Microsoft.SqlServer.ConnectionInfo.dll
  • Microsoft.SqlServer.Management.Sdk.Sfc.dll

对于命名空间,添加:

  • Microsoft.SqlServer.Management.Common
  • Microsoft.SqlServer.Management.Smo

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM