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

Rya*_*ter 319 sql sql-server copy migrate database-table

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

小智 531

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

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

我一直使用它,它运作得相当好.

  • 你不能说这是一个更好的答案.例如,它无法从脚本中调用自动化.BTW作者专门询问了"..SQL语句......".但当然这是一个很好的答案,但不是更好的答案;). (35认同)
  • 作者要求移动"(数据和所有)"; 所以我希望这个答案能做到这一点.它创建表但不创建任何键或索引; 所以对SQL答案没有多大改进. (3认同)
  • 它似乎只在2008版本中提供 (2认同)

Amy*_*y B 205

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

INSERT INTO bar..tblFoobar( *fieldlist* )
SELECT *fieldlist* FROM foo..tblFoobar
Run Code Online (Sandbox Code Playgroud)

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

  • @TahaRehmanSiddiqui:因为它回答了问题;)他没有问如何在数据库服务器之间复制它.但是大多数寻找答案的人最终会在这里,因为谷歌将其作为第一个结果:) (13认同)
  • @Tom OP 和许多提出此问题的人正在寻找“SQL 语句”,而不是工具。 (2认同)

leo*_*nfo 102

这应该工作:

SELECT * 
INTO DestinationDB..MyDestinationTable 
FROM SourceDB..MySourceTable 
Run Code Online (Sandbox Code Playgroud)

不会复制constaints,默认值或索引.创建的表将没有聚集索引.

或者你可以:

INSERT INTO DestinationDB..MyDestinationTable 
SELECT * FROM SourceDB..MySourceTable
Run Code Online (Sandbox Code Playgroud)

如果目标表存在且为空.

  • 这不会在SQL Server 2008中插入标识列的值.只有在使用列列表并且目标表的IDENTITY_INSERT为ON时才允许这样做. (4认同)

Igo*_*lov 46

如果它只是一个表,那么你需要做的就是

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

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

使用一个或多个对象,可以手动进行,无任何问题.然而,当不仅仅是一些更新时,第三方比较工具非常方便.现在我正在使用ApexSQL Diff进行架构迁移,但是你不能错过任何其他工具.


Sco*_*use 23

  1. 脚本的create table管理工作室,运行该脚本在酒吧创建表.(右键单击对象资源管理器中的表,脚本表为,创建为...)

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


rya*_*yan 16

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

  • 复制表架构
  • 任何约束(身份,默认值等)
  • 表中的数据
  • 以及其他许多选择

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


Nev*_*ess 9

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

insert into QualityAssuranceDB.dbo.Customers (columnA, ColumnB)
Select columnA, columnB from DeveloperDB.dbo.Customers
Run Code Online (Sandbox Code Playgroud)

此外,如果您还需要生成列名以及insert子句,请使用:

    select (name + ',') as TableColumns from sys.columns 
where object_id = object_id('YourTableName')
Run Code Online (Sandbox Code Playgroud)

复制结果并粘贴到查询窗口以表示您的表列名称,甚至这也将排除标识列:

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

请记住,如果数据库属于同一位置,则复制行的脚本将起作用.


你可以尝试这个.

select * into <Destination_table> from <Servername>.<DatabaseName>.dbo.<sourceTable>
Run Code Online (Sandbox Code Playgroud)

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