データベース内のすべてのテーブルをリストし、プロバイダに依存しないSQLコマンドがありますか(MSSQLServer、Oracle、MySQLで動作します)?データベース内のすべてのテーブルを一覧表示
答えて
最も近いオプションは、INFORMATION_SCHEMA
にテーブルを照会することです。
SELECT *
FROM INFORMATION_SCHEMA.Tables
WHERE table_schema = 'mydatabase';
INFORMATION_SCHEMA
は、標準SQLの一部ではなく、すべてのベンダーがそれをサポートしています。私の知る限りでは、それをサポートする唯一のRDBMSベンダーは、次のとおりです。例えば
- MySQL
- PostgreSQL
- のMicrosoft SQL Serverの2000/2005/2008
データベースのいくつかのブランド、 Oracle、IBM DB2、Firebird、Derbyなどは、システム上のメタデータを照会できるインターフェースを提供する同様の「カタログ」ビューを持っています。しかし、ビューの名前、それらに含まれる列、およびそれらの関係は、INFORMATION_SCHEMA
のANSI SQL標準と一致しません。言い換えると、同様の情報が利用可能ですが、その情報を取得するために使用するクエリは異なります。
(脚注:!システムのIBM DB2 UDBでのカタログ・ビュー私は、Windows/* NIXのためのIBM DB2 UDBでのカタログ・ビューとは異なります - そんなにUDBでユニバーサル用)
一部他のブランド(例えばSQLite)は、メタデータのための照会可能なインターフェースをまったく提供していません。
いいえ、彼らはすべて自分のやり方を愛しています。
いいえ、SQL標準では、テーブル名がどこにリストされているかを制約しないため、使用しているSQLエンジンによって異なるステートメント(通常は特別な名前のテーブルにSELECT
ステートメント)を実行する必要があります対処する。
ビルKarwinが正しく指摘するように、INFORMATION_SCHEMAは、SQL-92標準の一部です。一部のベンダーはそれをサポートしていないかもしれませんが、それは標準の一部です。 –
あなたは非SQLのアプローチを使用してOKですし、データベースのODBCドライバを持っているとそれがSQLTablesのエントリ・ポイントを実装している場合、おそらくあなたは、あなたが欲しい情報を得るかもしれません! APIの
pjjH
私は答えようとしていて、「いいえ、絶対にありません」と言いました。あなたの答えは私を助けました。私は今日何か新しいことを学んだ:) – wcm
それをサポートするRDBMSブランドのINFORMATION_SCHEMAのドキュメントへのリンクを追加しました。 –