- ベストアンサー
SQLServerでのデータ比較ツール
SQLServerにsamp、sampbakというテーブルがあったとします。 sampのバックアップがsampbakなのですが、どうもデータがずれてしまっているようで、簡単に比較抽出できるようなツールはありませんでしょうか? よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
使ったことはありませんが、SQL Server Compare Toolというものはシェアウェアでは存在するようです。 しかし、今回のような目的であれば、ツールを探すよりもクエリ書いたらいいんじゃないかと思いますが。。 DECLARE @table1 sysname DECLARE @table2 sysname DECLARE @keyfld sysname SET @table1='samp' --Set TableName SET @table2='sampbak' --Set TableName SET @keyfld='Key' --Set PrimaryKey Name DECLARE @sql varchar(max) SELECT @sql=ISNULL(@sql+'+','') +'ISNULL(CASE WHEN t1.'+name+' IS NULL AND t2.'+name+' IS NOT NULL THEN '''+name+'''' +' when t1.'+name+' IS NOT NULL AND t2.'+name+' IS NULL THEN '''+name+'''' +' when t1.'+name+'<>t2.'+name+' THEN '''+name+'''' +' end+'','','''')' FROM sys.columns WHERE object_id=object_id(@table1) ORDER BY column_id SET @sql='SELECT '+@sql +',t1.*,t2.* ' +' FROM '+@table1+' t1' +' FULL OUTER JOIN '+@table2+' t2 ON t1.'+@keyfld+'=t2.'+@keyfld +' WHERE ('+@sql+'<>'''')' EXEC (@sql)
その他の回答 (2)
- g_liar
- ベストアンサー率52% (382/728)
自分でも興味あって試してみました。 60列×60万行のテキストファイル(列間はスペース区切り)を2つ作り、片方を適当に変更して差分を作り、先のDFで比較したところ、相応の時間はかかったものの、見事に差分が出てきました。 様々なパターンを試したわけではありませんので、確実に比較抽出できることを保証することはできませんが、いちおうご報告まで。
お礼
g_liar様 ありがとうございます。今回はクエリを書いて行いました。かなりパフォーマンスを要求されましたが、なんとか無事?終了したように思います。いろいろとありがとうございました。
- g_liar
- ベストアンサー率52% (382/728)
テーブルどうしの比較ツールは知りません。 いったんテキストファイルに書き出して、以下のような比較ツールで差分抽出してはどうでしょ? http://www.vector.co.jp/soft/win95/util/se113286.html
お礼
早速のご回答ありがとうございます。 確かにテキストやEXCELに落として比較するということも考えたのですが、なにせ、テーブルレコード数が50万行近くありまして、一度で処理を行うには難しいのではないかと思っています。
お礼
ご回答ありがとうございます。 jamshid6様がおっしゃる通り、クエリを書いて・・・も考えましたが、クエリをあまり得意としておりませんでしたので、今回の質問にいたったしだいです。 jamshid6様がサンプルに書いておられるコードをもとにチャレンジしてみます。ありがとうございました。