【问题标题】:Copying Data between two similar Databases在两个相似的数据库之间复制数据
【发布时间】:2016-04-30 22:21:58
【问题描述】:

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

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

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

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

【问题讨论】:

  • 那么你的问题是什么,到目前为止你做了什么?
  • 我已经尝试过:“从 DatabaseA.dbo.table1 中选择 * 到 DatabaseB.dbo.table1 .... 这可行,但我需要一个可以遍历所有表并复制内容的脚本将数据库A的每个表转换成数据库B中的每个对应表
  • @DoreenSly,您还在等待答复吗?你所有的表都在 DBO 模式中吗?你有身份字段吗?

标签: sql sql-server sql-server-2008 vb6


【解决方案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 

【讨论】:

  • @Flicker ......感谢无数次......正如我想要的那样完美地工作。它移动了具有相同列的表的数据并跳过了不相等的表.....我使用相同的代码来获取少数不相等表的列表,并且我一个接一个地移动自己的数据。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-07
  • 2013-05-29
  • 2020-09-08
  • 2012-04-03
  • 2013-11-17
  • 1970-01-01
相关资源
最近更新 更多