SQL Serverでは、次の5つの方法のいずれかを使用して、Transact-SQLを使用して一時テーブルのリストを返すことができます。
これらは、ローカルとグローバルの両方の一時テーブルを返します。
オプション1– sys.tables
sys.tables
システムカタログビューは、テーブル情報を返すために特別に設計されています。
SELECT name FROM tempdb.sys.tables WHERE name LIKE '#%';
このページのすべてのビューと同様に、一時的なに関する情報が必要なために表示します。 テーブルの場合、 tempdbでこのビューをクエリする必要があります データベース。これを行うには、最初にそのデータベースに切り替えるか(現在のデータベースになるように)、クエリをデータベース名で修飾します。
この例では、クエリをデータベース名で修飾します。
オプション2– sys.objects
sys.objects
を使用することもできます システムカタログビュー。このオプションを選択した場合は、ユーザーテーブルのみが返されるように、タイプでフィルタリングする必要があります。
SELECT name FROM tempdb.sys.objects WHERE type = 'U';
U
「ユーザーテーブル」の略です。これを行う別の方法は、WHERE type_desc = 'USER_TABLE'
を使用することです。 。
オプション3– INFORMATION_SCHEMA.TABLES
ANSI標準オプションが必要な場合は、INFORMATION_SCHEMA.TABLES
を使用してください 見る。このオプションを選択した場合は、「ベーステーブル」のみが返されるように、タイプでフィルタリングする必要もあります。
SELECT TABLE_NAME FROM TempDB.INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'Base Table';
オプション4– sp_tables
ストアドプロシージャオプションを探している場合は、sp_tables
ストアドプロシージャでうまくいきます。
USE tempdb; EXEC sp_tables '#%';
引数名を明示的に含めることもできます。
USE tempdb; EXEC sp_tables @table_name = '#%', @table_owner = 'dbo', @table_qualifier = 'tempdb', @table_type = "'TABLE'", @fUsePattern = 1;
tempdbに切り替えたことに気付くでしょう 引数の1つとしてデータベースを指定したにもかかわらず、この手順を実行する前に。これは実際に必要です。 @table_qualifier
引数は現在のデータベースと一致する必要があります。
@fUsePattern
にも注意してください この場合、テーブル名にワイルドカード演算子を使用しているため、パターンは1である必要があります。 1
に設定する パターンマッチングを有効にします。 0
に設定する パターンマッチングを無効にします。
オプション5– dbo.sysobjects
これはおそらくオプションではないはずですが、とにかくリストします。 dbo.sysobjects
ビューは、下位互換性のためにSQLServerにのみ含まれています。これは非推奨のマークが付けられており、Microsoftは使用しないようにアドバイスしています。コードでこれに遭遇した場合は、前のオプションの1つに変更することを検討してください。
いずれにせよ、次のようになります。
SELECT name FROM tempdb..sysobjects WHERE name LIKE '#%';
二重ドットが何のためにあるのか疑問に思っている場合(..
)、これはデフォルトのスキーマを指定する簡単な方法です。この場合、デフォルトのスキーマはdbo
です。 、したがって、次のように書くこともできます:
SELECT name FROM tempdb.dbo.sysobjects WHERE name LIKE '#%';