我有两个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。
有人可以指出我解决问题的正确方法吗?
答案 0 :(得分:54)
试试这个:
使用Script Table As / Create Script
步骤
在目标服务器上,您可以发出T-SQL语句:
INSERT INTO dbo.YourTableNameHere
SELECT *
FROM [SourceServer].[SourceDatabase].dbo.YourTableNameHere
这应该可以正常工作。
答案 1 :(得分:40)
仅显示另一个选项(适用于SQL Server 2008及更高版本):
答案 2 :(得分:9)
在Tasks / Generate脚本中有脚本表选项!我一开始也想念它!但是你可以在那里生成插入脚本(非常好的功能,但在非常不直观的地方)。
当您进入“设置脚本选项”步骤时,请转到“高级”选项卡。
描述的步骤here(图片可以理解,但我确实用拉脱维亚语写作)。
答案 3 :(得分:6)
尝试使用SQL Server Import and Export Wizard(在任务 - >导出数据下)。
它提供在目标数据库中创建表。然而,正如您所见,脚本向导只能创建表结构。
答案 4 :(得分:5)
如果已经使用脚本创建了表,那么复制数据的另一种方法是使用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>
答案 5 :(得分:3)
只是为了踢。
由于我无法创建链接服务器,因为仅仅连接到生产服务器不足以使用INSERT INTO
我执行了以下操作:
它是一个后门解决方案,但由于我遇到了问题,它对我有用。
由于我使用SCRIPT TABLE AS / CREATE
创建了空表,以便传输所有密钥和索引,我无法使用SELECT INTO
。 SELECT INTO
仅在目标位置上不存在表但不复制键和索引时才有效,因此您必须手动执行此操作。使用INSERT INTO
语句的缺点是你必须手动提供所有列名,如果某些外键约束失败,它可能会给你一些问题。
感谢所有的举办者,有一些很棒的解决方案,但我决定接受marc_s anwser。
答案 6 :(得分:2)
您无法选择源/目标服务器。
如果数据库位于同一台服务器上,您可以执行此操作:
如果表格的列相等(包括订单!),那么你可以这样做:
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
答案 7 :(得分:2)
可以通过&#34;导入/导出数据...&#34;在SQL Server Management Studio中
答案 8 :(得分:1)
用于将数据从源复制到目标:
use <DestinationDatabase>
select * into <DestinationTable> from <SourceDataBase>.dbo.<SourceTable>
答案 9 :(得分:1)
这是一个解决方案,但它对我有用,我希望它能为其他人解决这个问题:
您可以在要导出的表上运行select SQL查询,并将结果保存为驱动器中的.xls。
现在创建要添加包含所有列和索引的数据的表。右键单击实际表并选择“创建到脚本”选项即可轻松完成此操作。
现在,您可以右键单击要添加表格的数据库,然后选择任务&gt;导入。
导出导出向导打开并选择下一步。选择Microsoft Excel作为输入数据源,然后浏览并选择之前保存的.xls文件。
现在选择目标服务器以及我们已创建的目标表。
注意:如果存在任何基于身份的字段,则在目标表中您可能希望删除标识属性,因为此数据也将被插入。因此,如果您只将此作为Identity属性,则会导致导入过程出错。
现在点击下一步并点击完成,它会显示正在导入的记录数,如果没有错误则返回成功。
答案 10 :(得分:0)
如果你有它可用的另一种选择: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库添加到引用中。但除此之外,这一直在为我做好准备。
更新:命名空间和库比我记忆中的更复杂。
对于库,添加对以下内容的引用:
对于命名空间,请添加:
答案 11 :(得分:0)
如果您没有链接服务器的权限,请按照以下步骤使用Sql Server导入/导出向导将表从一台服务器导入到另一台服务器: