首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在两个相似的数据库之间复制数据

在两个相似的数据库之间复制数据
EN

Stack Overflow用户
提问于 2016-04-30 22:21:58
回答 1查看 60关注 0票数 1

我有两个数据库,数据库A和数据库B,除了数据库B中一些表中的几个新列外,它们是相同的。

这两个数据库包含相同数量的表(1160个表)。我在数据库B中的大约40个表中添加了列。这是唯一不同于数据库A的。

我已清空了数据库B中的所有表,并希望将数据库A的每个表中的所有数据插入到数据库B中,只留下40个列数与源数据库A不同的表。

我需要一个脚本循环遍历数据库A中的所有表,检查列是否相同,然后将其内容复制到数据库B中的表中。如果列不相同,则应该留下表名的错误。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-01 03:49:47

假设您的所有表都是DBO,这应该可以工作。如果您有“身份”字段,请参见我的注释

代码语言:javascript
复制
-- select only tables that have the same number of columns
declare tbls cursor for with tblsA as (
select t.name, count(*) as colCount
from DatabaseA.sys.tables t
    inner join DatabaseA.sys.columns c on c.object_id = t.object_id
group by t.name
)
, tblsB as (
select t.name, count(*) as colCount
from DatabaseB.sys.tables t
    inner join DatabaseB.sys.columns c on c.object_id = t.object_id
group by t.name
)
select tblsA.name as TableName
from tblsA 
   inner join tblsB on tblsB.name = tblsA.name and tblsB.colCount = tblsA.colCount


declare @tblName varchar(100)
declare @sqlText nvarchar(max)
open tbls
fetch next from tbls into @tblName
while @@FETCH_STATUS = 0
begin
    print 'Inserting into ' + @tblName 

    --un-comment if you don't have identity fields. 
    --you will need more code here if some table have identity field and some don't
    --set @sqlText = 'SET IDENTITY_INSERT DatabaseB..' + @tblName + ' ON'
    --exec(@sqlText)

    set @sqlText = 'insert into DatabaseB..' + @tblName + ' select * from DatabaseA..' + @tblName
    exec(@sqlText)

    fetch next from tbls into @tblName
end

close tbls
deallocate tbls 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36960901

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档