2016-04-30 49 views
1
之间复制数据

我有两个数据库,数据库A和数据库B,这是相同的,除了在数据库B的一些表的约几个新列需要帮助两个类似的数据库表

两个数据库包含相同数量的表(1160个表)中,我在数据库B中添加了约40个表中的新增列,这是唯一使其与数据库A不同的因素。

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

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

请帮忙。

+0

那么你的问题到底是什么? –

+0

我试过了:“Select * into DatabaseB.dbo.table1 From DatabaseA.dbo.table1 .... That works,but I need a script that can loop through all table and copy the database of each table of Database A into数据库B中的每个对应表 – DoreenSly

+0

@DoreenSly,你还在等待答案吗?你是否有DBO模式中的表?你有没有标识字段? – FLICKER

回答

1

这应该工作,假设你所有的表都是DBO。 万一你有身份证,请看我的评论

-- 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 
+0

@闪烁......感谢数十亿次......完美地工作我希望它移动了同列的表的数据,并跳过了不相等的数据.....我使用相同的代码来获得少数不相等的表的列表,并且我将一个接一个地移动它们自己的数据。 – DoreenSly