• ベストアンサー

SQLServerでのデータ比較ツール

SQLServerにsamp、sampbakというテーブルがあったとします。 sampのバックアップがsampbakなのですが、どうもデータがずれてしまっているようで、簡単に比較抽出できるようなツールはありませんでしょうか? よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.2

使ったことはありませんが、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)

jmine
質問者

お礼

ご回答ありがとうございます。 jamshid6様がおっしゃる通り、クエリを書いて・・・も考えましたが、クエリをあまり得意としておりませんでしたので、今回の質問にいたったしだいです。 jamshid6様がサンプルに書いておられるコードをもとにチャレンジしてみます。ありがとうございました。

その他の回答 (2)

  • g_liar
  • ベストアンサー率52% (382/728)
回答No.3

自分でも興味あって試してみました。 60列×60万行のテキストファイル(列間はスペース区切り)を2つ作り、片方を適当に変更して差分を作り、先のDFで比較したところ、相応の時間はかかったものの、見事に差分が出てきました。 様々なパターンを試したわけではありませんので、確実に比較抽出できることを保証することはできませんが、いちおうご報告まで。

jmine
質問者

お礼

g_liar様 ありがとうございます。今回はクエリを書いて行いました。かなりパフォーマンスを要求されましたが、なんとか無事?終了したように思います。いろいろとありがとうございました。

  • g_liar
  • ベストアンサー率52% (382/728)
回答No.1

テーブルどうしの比較ツールは知りません。 いったんテキストファイルに書き出して、以下のような比較ツールで差分抽出してはどうでしょ? http://www.vector.co.jp/soft/win95/util/se113286.html

jmine
質問者

お礼

早速のご回答ありがとうございます。 確かにテキストやEXCELに落として比較するということも考えたのですが、なにせ、テーブルレコード数が50万行近くありまして、一度で処理を行うには難しいのではないかと思っています。

関連するQ&A

専門家に質問してみよう