Besoin d'aide pour copyr des données entre deux tables de database similaires

J'ai deux database, database A et database B, qui sont les mêmes à l'exception de quelques nouvelles colonnes de certaines tables dans la database B

La database deux contient le même nombre de tables (1160 tables), j'ai ajouté de nouvelles colonnes supplémentaires à environ 40 tables dans la database B et c'est la seule chose qui le rend différent de la database A.

J'ai vidé toutes les tables de la database B et je souhaite insert toutes datatables de chaque table de la database A dans la database B, ne laissant que les 40 tables dont le nombre de colonnes est différent de celui de la database source A.

J'ai besoin d'aide sur le script pour parcourir toutes les tables dans la database A, vérifier si les colonnes sont les mêmes, puis copyr son contenu dans cette table dans la database B, si les colonnes ne sont pas identiques, cela devrait laisser une erreur. nom de la table.

S'il vous plaît aider.

Cela devrait fonctionner, en supposant que toutes vos tables sont DBO. dans le cas où vous avez un champ d'identité, voir mon commentaire

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