在SQL Server中将表从一个数据库复制到另一个数据库

我有一个名为foo的数据库和一个名为bar的数据库。我有一个表在foo叫tblFoobar,我想移动(数据和所有)数据库酒吧从数据库foo。执行此操作的SQL语句是什么?

873922 次浏览

在SQL Server上?在同一个数据库服务器上?使用三部分命名。

INSERT INTO bar..tblFoobar( *fieldlist* )
SELECT *fieldlist* FROM foo..tblFoobar

这只是移动数据。如果希望移动表定义(以及权限和索引等其他属性),则必须执行其他操作。

这应该可以工作:

SELECT *
INTO DestinationDB..MyDestinationTable
FROM SourceDB..MySourceTable

它将复制约束、默认值或索引。创建的表将有一个聚集索引。

或者你可以:

INSERT INTO DestinationDB..MyDestinationTable
SELECT * FROM SourceDB..MySourceTable

如果目标表存在且为空。

  1. 在management studio中编写create table脚本,在bar中运行该脚本以创建表。(在对象资源管理器中右键单击表,脚本表as,创建到…)

  2. INSERT bar.[schema].table SELECT * FROM foo.[schema].table

SQL Server Management Studio的“Import Data”任务(右键单击DB名称,然后单击tasks)将为您完成大部分工作。在要将数据复制到的数据库中运行它。

如果表不存在,它将为您创建它们,但您可能必须重新创建索引等。如果表确实存在,它将默认添加新数据,但您可以调整(编辑映射),这样它将删除所有现有数据。

我一直在用这个,而且效果很好。

你也可以使用生成SQL Server脚本向导来帮助指导SQL脚本的创建,可以做以下事情:

  • 复制表模式
  • 任何约束(标识、默认值等)
  • 表中的数据
  • 如果需要,还有许多其他选择

SQL Server 2008的好例子工作流,屏幕截图显示为在这里

你可以这样做:(一个一般的例子)

insert into QualityAssuranceDB.dbo.Customers (columnA, ColumnB)
Select columnA, columnB from DeveloperDB.dbo.Customers

此外,如果你需要生成列名,以及插入子句,使用:

    select (name + ',') as TableColumns from sys.columns
where object_id = object_id('YourTableName')

复制结果并粘贴到查询窗口中,以表示您的表列名,即使这样也会排除身份列:

    select (name + ',') as TableColumns from sys.columns
where object_id = object_id('YourTableName') and is_identity = 0

记住,如果数据库属于相同的位置,复制行的脚本将工作。


你可以试试这个。

select * into <Destination_table> from <Servername>.<DatabaseName>.dbo.<sourceTable>

如果两个DB在同一服务器上,则“服务器名称”为可选参数。

如果只有一张桌子,那么你所需要做的就是

  • 脚本表定义
  • 在另一个数据库中创建新表
  • 更新规则、索引、权限等
  • 导入数据(上面已经显示了几个插入示例)

您必须考虑的一件事是其他更新,例如将来迁移其他对象。注意,源表和目标表没有相同的名称。这意味着如果你依赖视图、存储过程和其他对象,你也必须做出改变。

对于一个或几个对象,你可以手动去w/o任何问题。然而,当有超过几个更新时,第三方比较工具就非常方便了。现在我正在使用ApexSQL Diff来进行模式迁移,但使用其他任何工具都不会出错。

我给你三个选择:

如果是同一个实例上的两个数据库:

SELECT  * INTO My_New_Table FROM [HumanResources].[Department];

如果它们是不同服务器上的两个数据库,并且你有链接服务器,那么:

SELECT  * INTO My_New_Table FROM [ServerName].[AdventureWorks2012].[HumanResources].[Department];

如果它们是不同服务器上的两个数据库,并且你没有链接服务器,那么:

SELECT * INTO My_New_Table
FROM OPENROWSET('SQLNCLI', 'Server=My_Remote_Server;Trusted_Connection=yes;',
'SELECT * FROM AdventureWorks2012.HumanResources.Department');