331

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

4

8 回答 8

538

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

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

我一直都在使用它,而且效果很好。

于 2008-10-09T15:36:17.950 回答
214

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

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

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

于 2008-10-09T15:22:46.263 回答
113

这应该有效:

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

不会复制约束、默认值或索引。创建的表将没有聚集索引。

或者,您可以:

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

如果您的目标表存在并且为空。

于 2008-10-09T15:31:50.830 回答
46

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

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

您必须考虑的一件事是其他更新,例如将来迁移其他对象。请注意,您的源表和目标表的名称不同。这意味着如果您依赖对象(例如视图、存储过程和其他),您还必须进行更改。

Whit 一个或多个对象,您可以手动进行,没有任何问题。但是,当更新不止一些时,第 3 方比较工具会派上用场。现在我正在使用ApexSQL Diff进行架构迁移,但使用其他任何工具都不会出错。

于 2013-03-20T09:56:22.363 回答
23
  1. 在管理工作室中编写脚本create table,在栏中运行该脚本以创建表。(在对象资源管理器中右键单击表,将表脚本作为,创建到...)

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

于 2008-10-09T15:32:43.183 回答
17

您还可以使用生成 SQL Server 脚本向导来帮助指导创建可以执行以下操作的 SQL 脚本:

  • 复制表架构
  • 任何约束(身份、默认值等)
  • 表内数据
  • 如果需要,还有许多其他选择

SQL Server 2008的良好示例工作流,此处显示屏幕截图。

于 2011-10-11T23:41:05.047 回答
9

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

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>

如果两个数据库位于同一服务器中,则服务器名称是可选的。

于 2012-05-06T00:06:54.733 回答
0

我给你三个选择:

如果它们是同一实例上的两个数据库,请执行以下操作:

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');
于 2021-11-03T13:05:09.013 回答