INFORMATION_SCHEMA.TABLES ビューを使用する

2024-04-05

SQL Server で T-SQL を使用して、現在のデータベース内のすべてのテーブルのリストを取得するには、いくつかの方法があります。最も一般的に使用される方法は、sys.objects カタログビューをクエリする方法です。

方法 1: sys.objects カタログビューを使用する

sys.objects カタログビューには、データベース内のすべてのオブジェクトに関する情報が含まれています。 テーブル、ビュー、プロシージャ、関数など、さまざまな種類のオブジェクトに関する情報が含まれています。

すべてのテーブルを取得するには、次のクエリを使用します。

SELECT name
FROM sys.objects
WHERE type = 'U'
ORDER BY name;

このクエリは、sys.objects カタログビューをクエリし、type 列の値が 'U' (テーブルを表す) であるすべての行を選択します。 結果は、name 列のアルファベット順で返されます。

方法 2: INFORMATION_SCHEMA.TABLES ビューを使用する

INFORMATION_SCHEMA.TABLES ビューは、sys.objects カタログビューと似ていますが、SQL Server のすべてのバージョンで使用できるという利点があります。

SELECT table_name
FROM INFORMATION_SCHEMA.TABLES
ORDER BY table_name;

このクエリは、INFORMATION_SCHEMA.TABLES ビューをクエリし、table_name 列の値を選択します。 結果は、table_name 列のアルファベット順で返されます。

方法 3: 動的 SQL を使用する

動的 SQL を使用して、すべてのテーブルのリストを取得することもできます。 これを行うには、sp_tables システムプロシージャを使用します。

次のコードスニペットは、sp_tables システムプロシージャを使用してすべてのテーブルを取得する方法を示しています。

DECLARE @table_name NVARCHAR(128);

EXEC sp_tables @table_name = N'', @table_type = N'TABLE';

WHILE @@FETCH_STATUS = 0
BEGIN
    PRINT @table_name;
    EXEC sp_tables @table_name = N'@table_name', @table_type = N'TABLE';
END;

このコードスニペットは、sp_tables システムプロシージャを 2 回呼び出します。 1 回目の呼び出しでは、空の文字列が渡され、すべてのテーブルの名前が返されます。 2 回目の呼び出しでは、前の呼び出しで返されたテーブル名が渡され、そのテーブルに関連するすべてのビューが返されます。

ヒント

  • 特定のスキーマのすべてのテーブルを取得するには、WHERE 句を使用してクエリをフィルタリングできます。たとえば、AdventureWorks スキーマのすべてのテーブルを取得するには、次のクエリを使用します。
SELECT name
FROM sys.objects
WHERE type = 'U'
AND schema_name = 'AdventureWorks'
ORDER BY name;
  • クエリ結果をさらに制限するには、LIKE 演算子を使用できます。たとえば、Cust で始まる名前を持つすべてのテーブルを取得するには、次のクエリを使用します。
SELECT name
FROM sys.objects
WHERE type = 'U'
AND name LIKE 'Cust%'
ORDER BY name;



SELECT name
FROM sys.objects
WHERE type = 'U'
ORDER BY name;

このクエリを実行すると、次のようになります。

Output:

Customers
Employees
Orders
Order Details
Products

この出力は、現在のデータベース内に CustomersEmployeesOrdersOrder DetailsProducts の 5 つのテーブルがあることを示しています。

以下のサンプルコードは、方法 2: INFORMATION_SCHEMA.TABLES ビューを使用する で説明した方法を使用して、現在のデータベース内のすべてのテーブルのリストを取得する方法を示しています。

SELECT table_name
FROM INFORMATION_SCHEMA.TABLES
ORDER BY table_name;

このクエリを実行すると、前と同じ出力が得られます。

DECLARE @table_name NVARCHAR(128);

EXEC sp_tables @table_name = N'', @table_type = N'TABLE';

WHILE @@FETCH_STATUS = 0
BEGIN
    PRINT @table_name;
    EXEC sp_tables @table_name = N'@table_name', @table_type = N'TABLE';
END;

これらのサンプルコードは、SQL Server Management Studio などのツールを使用して実行できます。




SQL Server で T-SQL を使用してデータベース内のすべてのテーブルのリストを取得するその他の方法

方法 4: カーソルを使用する

カーソルを使用して、sys.objects カタログビューの行を反復処理し、各行の name 列の値を取得することもできます。

DECLARE c_cursor CURSOR FOR
SELECT name
FROM sys.objects
WHERE type = 'U'
ORDER BY name;

OPEN c_cursor;

FETCH NEXT FROM c_cursor INTO @table_name;

WHILE @@FETCH_STATUS = 0
BEGIN
    PRINT @table_name;
    FETCH NEXT FROM c_cursor INTO @table_name;
END;

CLOSE c_cursor;
DEALLOCATE c_cursor;

SQL Server 2016 以降では、列挙を使用して sys.objects カタログビューの行を反復処理することもできます。

DECLARE enum_cursor CURSOR FOR
  SELECT name
  FROM sys.objects
  WHERE type = 'U'
  ORDER BY name;

DECLARE @table_name NVARCHAR(128);

WHILE @@FETCH_STATUS = 0
BEGIN
  FETCH NEXT FROM enum_cursor INTO @table_name;
  PRINT @table_name;
END;

CLOSE enum_cursor;
DEALLOCATE enum_cursor;
SELECT
  t.value('name(1)', 'nvarchar(128)') AS table_name
FROM
  (
    SELECT *
    FROM sys.objects
    WHERE type = 'U'
    FOR XML PATH(''), TYPE
  ) AS x
  CROSS APPLY xml.nodes('//Row') AS xtr
  CROSS APPLY xml.column('name', xtr) AS t;

これらの方法はすべて、現在のデータベース内のすべてのテーブルのリストを取得するために使用できます。どの方法を使用するかは、個人の好みや特定の状況によって異なります。

要約


sql-server t-sql database-table


ALTER TABLE NOCHECK/CHECKステートメントで外部キー制約を無効にする方法

T-SQL では、以下の2つの方法で外部キー制約を一時的に無効にすることができます。ALTER TABLE NOCHECK / CHECK ステートメントを使用するCHECK CONSTRAINT トリガーを使用するALTER TABLE NOCHECK ステートメントは、指定されたテーブルのすべての外部キー制約のチェックを無効にします。ALTER TABLE CHECK ステートメントは、無効化されていた制約を再び有効にします。...


SQL Server 2017 以前で文字列をトリムする方法

LTRIM関数は、文字列の先頭から指定した文字を削除します。各関数の詳細削除文字は省略可能です。省略した場合、デフォルトでは空白文字(スペース、タブ、改行など)が削除されます。使用例以下の例では、LTRIM関数、RTRIM関数、TRIM関数をそれぞれ使用して、文字列の先頭と末尾から空白文字を削除しています。...


SQL ServerのGuid列におけるクラスター化インデックスのメリットとデメリット

SQL Server で Guid 列にクラスター化インデックスを作成するべきかどうかは、パフォーマンスとデータ整合性の要件に基づいて慎重に判断する必要があります。メリットとデメリットメリットGuid 列を主キーとして使用する場合、クラスター化インデックスはデータの挿入、更新、削除のパフォーマンスを向上させます。...


SQL Server 2008:Windows認証とSQL Server認証を使い分ける!混合モード設定の全手順

前提条件Microsoft SQL Server Management StudioがインストールされていることSQL Serverインスタンスへの管理者権限を持っていること手順オブジェクト エクスプローラーで、サーバーを右クリックし、「プロパティ」を選択します。...


T-SQLスクリプトで全貌を把握!ループ処理でntext/nvarchar(max)型データの全テキストを余すことなく表示

SQL Server では、大量のテキストデータを格納するために ntext および nvarchar(max) データ型が使用されます。これらのデータ型は、それぞれ 4GB までのテキストを格納できます。しかし、SSMS (SQL Server Management Studio) でこれらのデータ型からすべてのテキストを表示しようとすると、一部の文字が欠けてしまうことがあります。これは、SSMS のデフォルトの表示形式では、4GB 以上のテキストを適切に処理できないためです。...


SQL SQL SQL Amazon で見る



INFORMATION_SCHEMAビューを使ってテーブルとフィールドを取得する方法

SQL Serverでデータベース内のテーブルとそれぞれのフィールドを取得するには、いくつかの方法があります。ここでは、最も一般的で使いやすい2つの方法をご紹介します。方法1:システムビューを使用するSQL Serverには、データベース内のオブジェクトに関する情報を格納するシステムビューと呼ばれる特別なテーブルが用意されています。これらのビューを使用して、テーブルとフィールドに関する情報を取得することができます。


SSMSで2つのSQL Serverデータベースを比較する方法

スキーマとデータの比較には、いくつかのツールが利用可能です。それぞれに特徴があり、ニーズに合ったツールを選択する必要があります。SQL Server Management Studio (SSMS)無料Microsoft公式ツール基本的な比較機能


SQLクエリで特定のデータベースのすべてのテーブル名を取得する

INFORMATION_SCHEMA ビューは、データベースに関するメタデータ(テーブル名、列名、データ型など)へのアクセスを提供します。すべてのデータベースで利用可能な標準のビューなので、データベースの種類に関わらず、この方法を使用することができます。


SQL Server 2008 R2 でテーブル名を効率的に検索:サンプルコード付き

システムビューを使用するSQL Server 2008 R2 には、データベース内のすべてのオブジェクトに関する情報を格納するシステムビューが用意されています。これらのビューを使用して、テーブル名を含むテーブルに関する情報を検索できます。最もよく使用されるシステムビューは次のとおりです。