Comment déterminer si une table existe dans une base de données SQL Server dans SQL Server 2008?

13

Comment déterminer si une table existe dans une base de données SQL Server dans SQL Server 2008?

Amir Rezaei
la source

Réponses:

18

Si vous interrogez la table sysobjects, avec une requête comme

SELECT * FROM sysobjects WHERE xtype = 'U' AND name = 'yourTableName'

xtype = 'U' est une table utilisateur

vous pouvez ensuite envelopper ceci est une instruction IF EXISTS

IF EXISTS (SELECT * FROM sysobjects ...)
BEGIN
    ' do your stuff here if it exists
END 
Miles D
la source
5
+1 Il est important de noter que Microsoft a déplacé des fonctionnalités comme celle-ci vers les vues de gestion dynamique (DMV) depuis SQL Server 2005. Cela fonctionnera techniquement, mais Microsoft recommande désormais d'utiliser le DMV sys.tables pour cela. SI EXISTE (SELECT * FROM sys.tables WHERE type = 'U' AND name = 'yourTableName'). Fonctionnellement, votre déclaration et ma déclaration font exactement la même chose. Je voulais juste mentionner les DMV. Pour en savoir plus sur les DMV, consultez la documentation msdn.microsoft.com/en-US/library/ms188754%28v=SQL.105%29.aspx
Matt M
C'est un bon appel Matt. Les vieilles habitudes ont la vie dure :-) La vôtre est la meilleure façon.
Miles D
1
Je ne sais pas si cela fait beaucoup de différence mais je préférerais SI EXISTE (SÉLECTIONNEZ 1 DE sys.tables ...)
David Hayes
@DavidHayes Oui, je suppose que cette solution est plus rapide car elle n'interroge pas pour trouver les noms des colonnes.
Xriuk
12

Voici une autre façon de le trouver

IF OBJECT_ID('tablename') IS NULL
PRINT 'Table Does not Exist'
Nomade
la source
Agréable et simple, pas besoin d'interroger des tables système complexes. Merci!
Shadow9
2
Cela ne détecterait-il pas, par exemple, des vues du même nom? Peut-être des procédures stockées et autres?
MarioDS
Pas si votre schéma qualifie l'objet.
Grant Fritchey
1
IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES 
           WHERE TABLE_NAME = 'your table name here')
BEGIN
  PRINT 'Table Exists'
END
Divya Diya
la source