時々、SHOW TABLES
と入力していることに気づきます。 SQL Serverでは、テーブルのリストを取得することを期待しています。
MySQLまたはMariaDBを使用している場合、これは完全に理にかなっています。ただし、SQL Server/T-SQLにはSHOW TABLES
がありません MySQLやMariaDBのようなステートメントなので、機能しません。そして、私は忘れ続けます。しかし幸いなことに、SQLServerには代替手段があります。
SQLServerでテーブルのリストを取得するための5つのオプションを次に示します。これらは、とらえどころのないSHOW TABLES
を見つけようとしているときにいつでも使用できます。 SQLServerのステートメント。
sys.tables
sys.tables
システムカタログビューは、ユーザーテーブル情報を返すために特別に設計されています:
SELECT name
FROM sys.tables;
これにより、現在のデータベース内のすべてのユーザーテーブルの名前が返されます。ステートメントの前にUSE <database name>
を付けると、正しいデータベースに切り替えることができます。 ここで、<database name>
は、リストするテーブルのデータベースの名前です。
たとえば、次のステートメントは、KrankyKranes
からすべてのユーザーテーブルを返します。 データベース:
USE KrankyKranes;
SELECT name
FROM sys.tables;
必要に応じてスキーマを返すこともできます:
SELECT
SCHEMA_NAME(schema_id) AS schema_name,
name AS table_name
FROM sys.tables;
ここでは、SCHEMA_NAME()
を使用しました schema_id
の値を変換する関数 スキーマの実際の名前に列を追加します。
sys.objects
sys.objects
を使用することもできます システムカタログビュー。このオプションを選択すると、タイプでフィルタリングして、ユーザーテーブルのみが返されるようにすることができます。
SELECT name
FROM sys.objects
WHERE type = 'U';
これにより、現在のデータベースからユーザーテーブルが返されます。このビューには、schema_id
も含まれています 列なので、SCHEMA_NAME()
を使用できます 必要に応じて、それをスキーマ名に変換する関数。
information_schema.tables
INFORMATION_SCHEMA.TABLES
viewは、現在のユーザーがアクセス許可を持っている現在のデータベースのテーブルまたはビューごとに1行を返します。
このビューをタイプでフィルタリングして、ベーステーブルのみが返されるようにすることができます:
SELECT
TABLE_SCHEMA,
TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'Base Table';
TABLE_SCHEMA
列にはテーブルスキーマ名が含まれているため、SCHEMA_NAME()
を使用する必要はありません。 スキーマIDをその名前に変換する関数。
sp_tables
sp_tables
ストアドプロシージャは、現在の環境でクエリできるオブジェクトのリストを返します。これは、シノニムオブジェクトを除くすべてのテーブルまたはビューを意味します。
このプロシージャを呼び出す最も速くて簡単な方法は次のとおりです。
sp_tables;
ただし、オブジェクトの長いリストが返される可能性があります。
通常は、より具体的にする方がよいでしょう。例:
EXEC sp_tables
@table_owner = 'dbo',
@table_qualifier = 'KrankyKranes',
@table_type = "'TABLE'";
ここでは、KrankyKranes
にユーザーテーブルを表示する手順を説明しています。 dbo
が所有するデータベース 。
@table_type
引数は、コンマで区切られた値のリストを受け入れます。したがって、ビューを含める場合は、次のようにすることができます。
EXEC sp_tables
@table_owner = 'dbo',
@table_qualifier = 'Music',
@table_type = "'TABLE', 'VIEW'";
dbo.sysobjects
SQL Server 2005より前は、dbo.sysobjects
ビューは、テーブルやその他のオブジェクトを表示するためのビューでした。
したがって、古いエディションのSQL Serverを使用している場合は、次のことができます。
SELECT name
FROM dbo.sysobjects
WHERE xtype = 'U';