在SQL Server中将表从一个数据库复制到另一个数据库
我有一个名为foo的数据库和一个名为bar的数据库。 我有一个名为tblFoobar的foo表,我想从数据库foo移动(数据和所有)到数据库栏。 什么是SQL语句来做到这一点?
在SQL Server上? 和在同一个数据库服务器上? 使用三部分命名。
INSERT INTO bar..tblFoobar( *fieldlist* ) SELECT *fieldlist* FROM foo..tblFoobar
这只是移动数据。 如果您想要移动表格定义(以及其他属性,例如权限和索引),则必须执行其他操作。
SQL Server Management Studio的“导入数据”任务(右键单击数据库名称,然后任务)将为您执行大部分操作。 从要复制数据的数据库运行它。
如果这些表不存在,它将为您创build它们,但是您可能不得不重新创build任何索引等。 如果表存在,它会默认附加新数据,但您可以调整(编辑映射),以便删除所有现有数据。
我一直使用它,它工作得很好。
这应该工作:
SELECT * INTO DestinationDB..MyDestinationTable FROM SourceDB..MySourceTable
它不会复制constaints,默认或索引。 创build的表不会有聚集索引。
或者,您可以:
INSERT INTO DestinationDB..MyDestinationTable SELECT * FROM SourceDB..MySourceTable
如果您的目标表存在并且为空。
如果只有一张桌子,那么你所要做的就是
- 脚本表定义
- 在另一个数据库中创build新表
- 更新规则,索引,权限等
- 导入数据(上面已经显示了几个插入示例)
有一件事你必须考虑的是其他的更新,比如将来移植其他对象。 请注意您的源表和目标表不具有相同的名称。 这意味着如果你有依赖的对象,如视图,存储过程等,你也必须做出改变。
惠一个或几个对象,你可以手动没有任何问题。 但是,当不止一次更新时,第三方比较工具非常方便。 现在,我正在使用ApexSQL Diff来进行模式迁移,但是您不能在其他任何工具上出错。
-
在management studio中编写
create table
,在bar中运行该脚本创build表。 (在对象资源pipe理器中右键单击表,脚本表为,创build为…) -
INSERT bar.[schema].table SELECT * FROM foo.[schema].table
您还可以使用“ 生成SQL Server脚本向导”来帮助指导创build可执行以下操作的SQL脚本:
- 复制表架构
- 任何约束(身份,默认值等)
- 表中的数据
- 和其他许多选项,如果需要的话
SQL Server 2008的良好示例工作stream程, 此处显示的屏幕截图。
你可以这样走:(一个普遍的例子)
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>
如果两个数据库在同一台服务器上,服务器名称是可选
如果有现有的表,我们只想复制数据,我们可以尝试这个查询。
插入到Destination_Existing_Tbl中selectcol1,col2 FROM Source_Tbl
复制数据
INSERT INTO Alfestonline..url_details(url,[status],recycle) SELECT url,status,recycle FROM AlfestonlineOld..url_details