将表数据从一个SQL Server导出到另一个SQL Server
我有两个SQL Server(都是2005版本)。
我想从一个到另一个迁移几个表。
我努力了:
-
在源服务器上,我右键单击数据库,select
Tasks/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,我的问题?
尝试这个:
-
使用“
Script Table As / Create Script
步骤中的Script Table As / Create Script
在目标服务器上创build表 -
在目标服务器上,然后可以发出T-SQL语句:
INSERT INTO dbo.YourTableNameHere SELECT * FROM [SourceServer].[SourceDatabase].dbo.YourTableNameHere
这应该工作得很好。
只是为了显示另一个选项(对于SQL Server 2008及更高版本):
- 右键单击数据库 – >select“任务” – >select“生成脚本”
- select要复制的特定数据库对象。 我们来说一个或多个表格。 点击下一步
- 点击高级,向下滚动到“脚本数据types”,然后select“模式和数据”。 点击OK
- 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 INTO
。 SELECT 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库添加到引用。 但除此之外,这一直在为我工作。