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

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

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

我努力了:

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

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

然后我试着用:

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

但是我得到错误:

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

有人可以指点我正确的解决scheme,我的问题?

尝试这个:

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

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

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

这应该工作得很好。

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

  1. 右键单击数据库 – >select“任务” – >select“生成脚本”
  2. select要复制的特定数据库对象。 我们来说一个或多个表格。 点击下一步
  3. 点击高级,向下滚动到“脚本数据types”,然后select“模式和数据”。 点击OK
  4. select保存生成脚本的位置,然后单击“下一步”继续

任务/生成脚本中有脚本表选项! 开始时我也错过了! 但你可以在那里生成插入脚本(非常好的function,但在非常不直观的地方)。

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

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

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

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

如果表已经使用脚本创build,那么复制数据的另一种方法是使用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> 

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

您无法select源/目标服务器。

如果数据库在同一台服务器上,则可以这样做:

如果表的列是平等的(包括顺序!),那么你可以这样做:

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

如果你想这样做,你可以备份/恢复源数据库。 如果您需要更频繁地执行此操作,我build议您在定义源数据库(您可以select任何服务器上的任何连接)的情况下启动一个SSIS项目,并创build一个将数据移动到其中的项目。 在这里查看更多信息: http : //msdn.microsoft.com/en-us/library/ms169917%28v=sql.105%29.aspx

只是为了踢。

由于我没有能够创build链接的服务器,因为只是连接到生产服务器不足以使用INSERT INTO我做了以下:

  • 创build了生产服务器数据库的备份
  • 恢复了我的testing服务器上的数据库
  • 执行插入语句

它的后门解决scheme,但由于我有问题,它为我工作。

由于我使用SCRIPT TABLE AS / CREATE创build了空表,以便传输所有的密钥和索引,所以我无法使用SELECT INTOSELECT INTO只适用于目标位置不存在的表,但不复制键和索引,所以你必须这样做manualy。 使用INSERT INTO语句的缺点是必须手动提供所有列名称,如果某些外键约束失败,可能会出现一些问题。

感谢所有的船员,有一些很好的解决scheme,但我决定接受marc_s anwser。

将数据从源复制到目标:

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

这是一个绕过解决scheme,但它对我来说,我希望它适用于其他人的这个问题:

您可以在要导出的表上运行selectSQL查询,并将结果保存为.xls。

现在创build你想添加所有列和索引的数据表。 这可以通过右键单击实际表格并select“创build到脚本”选项轻松完成。

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

导入导出向导打开并select下一步。selectMicrosoft Excel作为input数据源,然后浏览并select之前保存的.xls文件。

现在select目标服务器以及我们已经创build的目标表。

注意:如果存在任何基于身份的字段,则在目标表中可能需要删除标识属性,因为这些数据也将被插入。 所以如果你只有这个身份属性,那么它会错误的导入过程。

现在点击下一步,点击完成,它会告诉你有多lesslogging被导入,如果没有错误发生,返回成功。

还有另一种select,如果你有它可用: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(); 

我想我必须显式search并将Microsoft.SqlServer.Smo库添加到引用。 但除此之外,这一直在为我工作。