構造の観点から SQL Server から情報を取得する必要があります
例: すべてのデータベース、すべてのプロシージャ、プロシージャからのすべてのパラメーター、テーブルからのすべての列名、テーブル列からの列の型を一覧表示する必要があります。
それを行うためのアプローチはどのようになりますか?
ありがとう
構造の観点から SQL Server から情報を取得する必要があります
例: すべてのデータベース、すべてのプロシージャ、プロシージャからのすべてのパラメーター、テーブルからのすべての列名、テーブル列からの列の型を一覧表示する必要があります。
それを行うためのアプローチはどのようになりますか?
ありがとう
(少なくとも)3つの方法があります。
DatabaseMetaDataクラスを使用します。そこにはたくさんあるので、詳細についてはJavaドキュメントを参照してください。これはすべてのデータベースエンジンで標準であるため、推奨される方法だと思います。したがって、別のデータベースエンジンに切り替えても、それは引き続き機能し、その使用方法について学んだことは、このデータベースエンジンで作業しているか別のデータベースエンジンで作業しているかに関係なく適用されます。
「information_schema」に対してクエリを実行します。基本的に、これはデータベース構造に関する情報を含むデータベースです。すべてのテーブル、すべての列などをリストしたテーブルがあります。これは2番目に良い選択です。information_schemaは、データベース全体で多かれ少なかれ標準的です。残念ながら、MSSQLServerの実装は最適ではありません。
「システムテーブル」や「システムビュー」に対してクエリを実行します。MS SQL Serverには、データベース構造に関する情報を含む一連のテーブルがあります。information_schemaと同様ですが、MS SQL Serverに固有であるため、計算フィールドやID列など、標準SQLの一部ではないもののメタデータが含まれます。また、MSによるinformation_schemaの実装よりも完全で信頼性があります。
DB内のテーブルや特定のテーブル内の列など、実際に一般的なものについては、information_schemaとシステムテーブルは同等に優れており、便利です。しかし、他に多くのものが必要な場合は、MSによるinformation_schemaの実装がすぐに不十分であることがわかります。Webで、information_schemaではなくシステムテーブルを使用するように開発者に勧めるコメントをたくさん見てきました。コード自体と得られた経験の両方が移植性がないため、非標準のものを使用するのは好きではありませんが、この場合、それらは正しいと思います。システムテーブルを使用してください。
しかし、DatabaseMetaDataは、必要なものが得られるのであれば、さらに優れています。
DatabaseMetaDataインターフェースをチェックしてください