sql >> データベース >  >> RDS >> Database

T-SQLを使用して一時テーブルを一覧表示する5つの方法

    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 '#%';
    

    1. SQLiteでのDate()関数のしくみ

    2. MySQLでインデックス付きビューを作成することは可能ですか?

    3. oracle PL / SQLIPv6cidrの範囲IPを計算する方法

    4. SQLiteクエリ結果をINSERTステートメントとして出力する