2017-05-24 16 views
0

diffデータベースの2つのdiffテーブルからカラム名を取得し、それらを比較してテーブルに余分なカラムがあるかどうかを確認しようとしています。それらは正確に一致する必要があります。考えられる解決策の1つは、テーブルとテンポラリテーブルの両方からすべての列名を並べて比較することです。 Plsヘルプ。MS SQLのdiffデータベースの2つのdiffテーブルのカラム名を比較

IF OBJECT_ID('tempdb..#myTable') IS NOT NULL DROP TABLE #myTable 

CREATE table #myTable (
    table1 varchar(100) null, 
    table2 varchar(100) null 
) 

INSERT INTO #myTable (table1) 
    SELECT name 
    FROM sys.columns 
    WHERE object_id = OBJECT_ID('table1') 

select * from #mytable 
DROP TABLE #mytable 
+0

にクエリを変更し、これは1時間の契約ですか?つまり、スキーマ比較ツール(Redgate/Devart/Idera /など)を使用できますか? –

+0

一時テーブルの代わりに、列をサブ選択にプルして、それらに 'FULL OUTER JOIN'を実行し、辺の1つが欠落しているレコードを探します。 – Danny

答えて

0

私はこの

IF OBJECT_ID('tempdb..#myTable') IS NOT NULL DROP TABLE #myTable 
CREATE table #myTable 
(
rowNum int IDENTITY(1,1), 
table1 varchar(100) null 
) 
GO 
IF OBJECT_ID('tempdb..#myTable2') IS NOT NULL DROP TABLE #myTable2 
CREATE table #myTable2 
(
rowNum int IDENTITY(1,1), 
table2 varchar(100) null 
) 
GO 

USE database1 --your 1st database name here 
GO 

INSERT INTO #myTable (table1) 
     (
     SELECT 
      name 
     FROM sys.columns 
     WHERE object_id = OBJECT_ID('Table_1')) 
GO 

USE database2 -- your 2nd database name here 
GO 

INSERT INTO #myTable2 (table2) 
     (
     SELECT 
      name 
     FROM sys.columns 
     WHERE object_id = OBJECT_ID('Table_2')) 
GO 


SELECT table1,table2 
FROM #myTable m 
FULL OUTER JOIN #myTable2 m2 ON m.rowNum = m2.rowNum 
ORDER BY table1,table2 
DROP TABLE #mytable 
DROP TABLE #mytable2 
+1

ORDER BYを追加するだけでよい場合がありますどちらの場合も同じ順序で列を挿入することを明示的に示します。 – pmbAustin

関連する問題