991 votes

SQL Server: Vérifier si la table existe

Je voudrais être l'ultime discussion sur la façon de vérifier si une table existe dans SQL Server 2000/2005 à l'aide de l'Instruction SQL.

Lorsque vous faites une recherche Google pour trouver la réponse, vous obtenez de nombreuses réponses différentes. Est-il un officiel de/vers l'arrière et vers l'avant compatible façon de faire?

Voici deux façons de le faire. Lequel parmi les deux est la norme/le meilleur moyen de le faire?

Première façon:

IF EXISTS (SELECT 1 
           FROM INFORMATION_SCHEMA.TABLES 
           WHERE TABLE_TYPE='BASE TABLE' 
           AND TABLE_NAME='mytablename') 
   SELECT 1 AS res ELSE SELECT 0 AS res;

Deuxième façon:

IF OBJECT_ID (N'mytablename', N'U') IS NOT NULL 
   SELECT 1 AS res ELSE SELECT 0 AS res;

MySQL fournit la simple AFFICHER les TABLES LIKE '%tablename%'; la déclaration. Je suis à la recherche de quelque chose de similaire.

1198voto

akmad Points 7059

Pour les requêtes comme cela, il est toujours préférable d'utiliser un INFORMATION_SCHEMA vue. Ces points de vue sont (pour la plupart) norme dans de nombreuses bases de données différentes et changent rarement d'une version à l'autre.

Pour vérifier si une table existe utilisation:

IF (EXISTS (SELECT * 
                 FROM INFORMATION_SCHEMA.TABLES 
                 WHERE TABLE_SCHEMA = 'TheSchema' 
                 AND  TABLE_NAME = 'TheTable'))
BEGIN
    --Do Stuff
END

249voto

jbloomer Points 2000

Notez également que si pour une raison quelconque, vous devez vérifier pour une table temporaire, vous pouvez faire ceci:

if OBJECT_ID('tempdb..#test') is not null
 --- temp table exists

210voto

Bob King Points 12913

Nous utilisons toujours les OBJECT_ID de style aussi longtemps que je me souviens

IF OBJECT_ID('*objectName*', 'U') IS NOT NULL 

34voto

Larry Leonard Points 111

La recherche d'une table sur une autre base de données:

if exists (select * from MyOtherDatabase.sys.tables where name = 'MyTable')
    print 'Exists'

15voto

Vinko Vrsalovic Points 116138

En utilisant les Informations de Schéma est le Standard SQL façon de le faire, il devrait donc être utilisé par toutes les bases de données qui le prennent en charge.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by: