私は Java ベースの OSS アプリSqlHawkに取り組んでいます。これは、その機能の 1 つとして、サーバーに対してアップグレード SQL スクリプトを実行することです。
Microsoft は、 GOステートメントを使用してスクリプトをバッチに分割することを慣例にしています。これは良い考えですが、文字列で誤った一致を要求するだけです。
現時点では、私は非常に初歩的なことをしています:
// split where GO on its own on a line
Pattern batchSplitter = Pattern.compile("^GO", Pattern.MULTILINE);
...
String[] splitSql = batchSplitter.split(definition);
...
これは機能しますが、引用された GO ステートメントやインデントの問題などによってつまずきがちです。
これを真に信頼できるものにする唯一の方法は、アプリに SQL パーサーを含めることだと思いますが、これを行う方法や、実際に信頼性が低下する可能性があるかどうかはわかりません (特に、このツールが複数の DBMS をサポートしている場合)。 .
この問題をどのように解決できますか? コード例は、ここで私にとって非常に役立ちます。
現在、スクリプトで見つかったバッチを実行するためにjtdsを使用しています。