Database
 sql >> Base de données >  >> RDS >> Database

5 façons de répertorier les tables temporaires à l'aide de T-SQL

Dans SQL Server, vous pouvez utiliser l'une des cinq méthodes suivantes pour renvoyer une liste de tables temporaires à l'aide de Transact-SQL.

Celles-ci renvoient des tables temporaires locales et globales.

Option 1 - sys.tables

Les sys.tables la vue du catalogue système est conçue spécifiquement pour renvoyer des informations sur les tables.

SELECT name
FROM tempdb.sys.tables
WHERE name LIKE '#%';

Comme pour toutes les vues sur cette page, vu que nous voulons des informations sur temporaire tables, nous devons interroger cette vue dans la tempdb base de données. Nous pouvons le faire soit en passant d'abord à cette base de données (pour que ce soit notre base de données actuelle), soit en qualifiant notre requête avec le nom de la base de données.

Dans cet exemple, je qualifie la requête avec le nom de la base de données.

Option 2 - sys.objects

Vous pouvez également utiliser le sys.objects vue du catalogue système. Si vous choisissez cette option, vous devrez la filtrer par type afin que seules les tables utilisateur soient renvoyées.

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

Le U signifie "table d'utilisateur". Une autre façon de le faire est d'utiliser WHERE type_desc = 'USER_TABLE' .

Option 3 – INFORMATION_SCHEMA.TABLES

Si vous voulez une option standard ANSI, utilisez le INFORMATION_SCHEMA.TABLES voir. Si vous choisissez cette option, vous devrez également la filtrer par type afin que seules les "tables de base" soient renvoyées.

SELECT TABLE_NAME
FROM TempDB.INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'Base Table';

Option 4 - sp_tables

Si vous recherchez une option de procédure stockée, le sp_tables procédure stockée fera l'affaire.

USE tempdb;
EXEC sp_tables '#%';

Vous pouvez également inclure explicitement les noms des arguments.

USE tempdb;
EXEC sp_tables 
  @table_name = '#%',
  @table_owner = 'dbo',
  @table_qualifier = 'tempdb',
  @table_type = "'TABLE'",
  @fUsePattern = 1;

Vous remarquerez que je suis passé à tempdb avant d'exécuter cette procédure, même si j'ai fourni la base de données comme l'un des arguments. Ceci est en fait nécessaire. Le @table_qualifier l'argument doit correspondre à la base de données actuelle.

Notez également que le @fUsePattern pattern doit être 1 dans ce cas, car j'utilise un opérateur générique dans le nom de la table. Le mettre à 1 permet la correspondance de modèles. Le mettre à 0 désactiverait la correspondance de modèle.

Option 5 – dbo.sysobjects

Cela ne devrait probablement pas être une option, mais je vais quand même l'énumérer. Les dbo.sysobjects view est uniquement inclus dans SQL Server pour la compatibilité descendante. Il a été marqué pour obsolescence et Microsoft déconseille de l'utiliser. Si vous le rencontrez dans votre code, envisagez peut-être de le remplacer par l'une des options précédentes.

Dans tous les cas, voici à quoi cela ressemble :

SELECT name
FROM tempdb..sysobjects
WHERE name LIKE '#%';

Si vous vous demandez à quoi sert le double point (.. ), c'est un moyen rapide de spécifier le schéma par défaut. Dans ce cas, le schéma par défaut est dbo , nous pourrions donc également écrire ce qui suit :

SELECT name
FROM tempdb.dbo.sysobjects
WHERE name LIKE '#%';