質問:
仕事に関係なく、プロジェクトエスカレートバージョンと一緒にプロジェクトは、対応するプロジェクトデータベースビジネス版もエスカレートされたものを、データベーステーブルがなど、フィールドを削除、追加、テーブルを変更し、テーブルを削除、フィールドの追加、フィールドを変更するように見えます手動検査、データベースのテーブルとフィールドがケースであれば変更は、作業負荷が非常に大きいです。
ソリューション:
汎用スクリプトここブロガーだけでリンクサーバーを介してクロスチェック別のサーバーをサポートすることができますバッチの実際の名前の古いものと新しいデータベース名を交換する必要があり、作業プロセスデータベーステーブルの構造の違いを書かれたバージョンを確認自動的に共有します2つのデータベースのテーブル・サーバとの間の構造の違い。
スクリプト:
/ * 説明:旧データベースDB_V1、新しいデータベース[ローカルホスト] .DB_V2。バッチの実際のニーズに応じて、データベース名の置き換え スクリプト出典:HTTPS://www.cnblogs.com/zhang502219048/p/11028767.html * / -一時表のsysobjectsに挿入 を選択しs.nameテーブル名として+ + t.nameを、 「」 T. * INTO #tempTA DB_V1.sys.tables Tから インナーs.schema_id t.schema_id ON = DB_V1.sys.schemas Sに参加 SELECT s.name + '' +テーブル名AS、T. * INTO #tempTBをt.name [ローカルホスト] .DB_V2.sys.tables Tから インナーs.schema_id t.schema_id ON = [ローカルホスト] .DB_V2.sys.schemas Sに参加 -のsyscolumnsの一時テーブルを挿入 DB_V1.dbo.syscolumnsから#tempCA INTO * SELECT SELECT * INTO [ローカルホスト] .DB_V2.dbo.syscolumnsから#tempCB -最初のデータベーステーブルとフィールド テーブルAS SELECT b.TableName、タイプ、フィールド名、長さa.length、c.nameとしてa.name #tempA INTO #tempCA Aから インナーb.object_id a.id ON参加#tempTA B = インナーsystypesにに参加C = c.xusertypeのa.xusertypeオン b.name順 -第二のデータベーステーブルとフィールド を選択b.TableNameテーブル名、フィールド名としてa.name、長さa.length、タイプとしてc.nameとして #tempB INTO #tempCB Aから インナーb.object_id a.id ON参加#tempTB B = インナーsystypesにに参加C ON c.xusertype a.xusertype = b.name順 -削除フィールド SELECT *から ( SELECT * #tempAから 除く #tempBからSELECT * )A; -追加フィールド SELECT *から ( SELECT * #tempBから 除いて からSELECT * #tempA )。 --select * #tempAから --select * #tempBから テーブル#tempTA、#tempTB、#tempCA、#tempCB、#tempA、#tempBをドロップ
古いデータベースDB_V1の例:
新しいデータベースDB_V2の例:
スクリプトの結果:
結論:
いくつかの図の上に見ることができ、差分部品表のフィールドが自動的に検出されたように。
[Reserved注ミョンテキスト出典:https://www.cnblogs.com/zhang502219048/p/11028767.html ]
質問:
仕事に関係なく、プロジェクトエスカレートバージョンと一緒にプロジェクトは、対応するプロジェクトデータベースビジネス版もエスカレートされたものを、データベーステーブルがなど、フィールドを削除、追加、テーブルを変更し、テーブルを削除、フィールドの追加、フィールドを変更するように見えます手動検査、データベースのテーブルとフィールドがケースであれば変更は、作業負荷が非常に大きいです。
ソリューション:
汎用スクリプトここブロガーだけでリンクサーバーを介してクロスチェック別のサーバーをサポートすることができますバッチの実際の名前の古いものと新しいデータベース名を交換する必要があり、作業プロセスデータベーステーブルの構造の違いを書かれたバージョンを確認自動的に共有します2つのデータベースのテーブル・サーバとの間の構造の違い。
スクリプト:
/* 使用说明:Old数据库为DB_V1,New数据库为[localhost].DB_V2。根据实际需要批量替换数据库名称 脚本来源:https://www.cnblogs.com/zhang502219048/p/11028767.html */ -- sysobjects插入临时表 select s.name + '.' + t.name as TableName, t.* into #tempTA from DB_V1.sys.tables t inner join DB_V1.sys.schemas s on s.schema_id = t.schema_id select s.name + '.' + t.name as TableName, t.* into #tempTB from [localhost].DB_V2.sys.tables t inner join [localhost].DB_V2.sys.schemas s on s.schema_id = t.schema_id -- syscolumns插入临时表 select * into #tempCA from DB_V1.dbo.syscolumns select * into #tempCB from [localhost].DB_V2.dbo.syscolumns -- 第一个数据库表和字段 select b.TableName as 表名, a.name as 字段名, a.length as 长度, c.name as 类型 into #tempA from #tempCA a inner join #tempTA b on b.object_id = a.id inner join systypes c on c.xusertype = a.xusertype order by b.name -- 第二个数据库表和字段 select b.TableName as 表名, a.name as 字段名, a.length as 长度, c.name as 类型 into #tempB from #tempCB a inner join #tempTB b on b.object_id = a.id inner join systypes c on c.xusertype = a.xusertype order by b.name --删掉的字段 select * from ( select * from #tempA except select * from #tempB ) a; --增加的字段 select * from ( #tempBから選択* except select * from #tempA )。 --select * #tempAから --select * #tempBから テーブル#tempTA、#tempTB、#tempCA、#tempCB、#tempA、#tempBをドロップ
古いデータベースDB_V1の例:
新しいデータベースDB_V2の例:
スクリプトの結果:
結論:
いくつかの図の上に見ることができ、差分部品表のフィールドが自動的に検出されたように。
[Reserved注ミョンテキスト出典:https://www.cnblogs.com/zhang502219048/p/11028767.html ]