24

最新バージョンで何が変更されたかを判断するために、SQL プロシージャーを頻繁に比較する必要があります。問題は、誰もが独自の書式設定スタイルを持っており、SQL は (通常) 改行を配置する場所を気にしないことです (たとえば、where 句をすべて 1 行に配置するか、各 AND の前に改行を配置するかなど)。

これにより、(特に長い手順の場合) 実際の違いを確認することが非常に困難になります。改行を無視できるようにする (つまり、空白として扱う) 無料の diff/merge ユーティリティが見つからないようです。これまでのところ、WinMerge と Beyond Compare を試してみましたが、うまくいきませんでした。これら2つの例を同一と見なす差分ツール(理想的には無料)を知っている人はいますか?

元。1:

the quick
brown

元。2:

the
quick
brown

前もって感謝します。

4

12 に答える 12

11

私はSourceGear の DiffMergeが本当に好きです!

すべてのプラットフォームで動作し、ルールセットが組み込まれていますが、独自のルールセットを作成および追加できます。つまり、必要なときに必要なものを無視できるということです。

ボーナス、無料です!

于 2010-11-05T20:39:21.337 に答える
7

私自身の同様のケースで私が行ったことは、非常に似た方法で2つの半異種SQLセットを自動的に編成するSQLプリティファイアを使用することです。次に、結果を貼り付けて WinMerge と比較します。

これは 2 段階のプロセスですが、特に多くのコード行が含まれる場合は、他の多くのオプションよりもはるかに快適です。

まともなWeb ベースの Sql Pretty プリンターへのリンク

于 2009-11-20T21:27:51.123 に答える
3

Compare++はオプションです。「スマート」メニューの「コード スタイルの変更を無視する」を試すことができます。C/C++、JavaScript、C#、Java などの多くの言語の構造化された比較をサポートしています。

于 2011-07-05T00:08:35.097 に答える
2

Araxis のマージが大好きです。無料ではありませんが、それだけの価値があります。特に、必要に応じて、あらゆる種類の空白を無視できます。

于 2009-11-20T21:27:01.173 に答える
2

Eclipse IDE の DTP (Data Tool Project) を使用できます。

それを示すために、ほぼ同一の 2 つの SQL ファイルを作成し、Eclipse に違いを表示させました。「次を表示」をクリックした後、スクリーンショットを撮りました。

ご覧のとおり、まだ改行が強調表示されていますが、SQL に実質的な変更が含まれていないことがすぐにわかります。ID を 1 から 2 に変更した場所を簡単に見つけることができます。

これが結果です。

代替テキスト 代替テキスト 代替テキスト

于 2010-11-07T23:59:50.980 に答える
2

「無料」の定義 (ビール vs スピーチ/リブレ) に関係なく、WinMerge (winmerge プラグインを使用) または Beyond Compare およびコマンドを許可するその他の比較ツールを使用して、 Poor Man's T-SQL Formatterを使用してこれを行うこともできます。コマンドライン バルク フォーマッタを使用した、ラインの事前フォーマット。

何もダウンロードせずに試してみたい場合は、オンラインですぐに使用できます (非 libre 対応の T-SQL Tidy、Instant SQL Formatter などのように)。

http://poorsql.com

于 2012-02-23T12:48:14.923 に答える
1

当社のSD Smart Differencerは、生のテキストではなく、正確な文法構文と構造に従って 2 つのソース プログラムを比較します。これは、コンパイラが行う方法で (SQL) ソースを解析し、対応するコンパイラ データ構造 (たとえば、抽象構文ツリー) を比較することによって行われます。したがって、SmartDifference は、改行、空白、または介在するコメントを気にしません。

改行に関してではなく、プログラミング言語の構造 (変数、式、ステートメント、ブロック、関数など) に関して、およびプログラマーの意図に近い用語 (削除、挿入、移動、コピー、行挿入または行削除ではなく、名前を変更します)。

SQL (他の多くのコンピューター言語名と同様) は、構文は似ていますが詳細が異なるコンピューター言語のファミリーの名前です。そのため、Smart Differencer では、どのSQL の方言を使用しているかが問題になります。PLSQL および SQL2011 用の SQL フロント エンド (したがって SmartDifferncers) があります。SQL がこれらのいずれかの境界内にとどまる限り、Smart Differencer は機能します。SQL Server や Postgres の追加機能を使用している限り、SmartDifferencer は現在役に立ちません。[私たちはビジネスの一環として言語パーサーを開発しているため、これは決して遅れるというよりも、遅れる問題であると予想しています]。

OP は詳細に SQL について尋ねましたが、彼の見出しの質問は言語にとらわれません。SQL 以外の広く使用されている他の多くの言語 (C、C++、C#、Java など) には、すでに SmartDifferencers があります。

于 2010-11-05T22:54:09.243 に答える
1

別の代替手段は、Emacs の Ediff です。Emacs を恐れていない場合はうまく機能します。

于 2010-11-10T00:34:39.147 に答える
0

PHPStorm の diff ツールの「空白を無視: すべて」コマンドは、必要に応じて完全に実行します。また、SVN、git などの多くの VCS のサポートが統合されています。統合された SQL サポートも同様です!

無料ではありませんが、時間も無料ではありません。難しい方法で時間を無駄にしたいですか?どうぞ。

2014 年なのに、これがすべての diff ツールの標準機能ではなかったなんて、いまだに信じられません!!

ところで、WebStorm の diff ツールも機能すると思います。

于 2014-03-03T21:42:30.390 に答える
-1

KDiffを試しましたか?空白は無視できると確信しています。空白が十分に強力でない場合は、ファイルに対してプリプロセッサを実行できます。何よりも、無料オープンソースです。

于 2010-11-09T16:43:54.187 に答える
-1

Windows を使用している場合、WinMergeはかなり洗練されています。Linux (およびおそらく OS X) では、Meldがあります。

どちらもビールのように無料で、かなりうまく機能します。Araxis ほどクールではありませんが、机の上でよだれをたらしたくはありません。

どちらも、空白を無視するなどの機能を備えた多目的差分ツールです。空白行を無視するかどうかは絶対にわかりませんが、無視できる可能性は十分にあります。

于 2009-11-20T21:58:03.957 に答える