Wie bestimme ich, ob eine Tabelle in einer SQL Server-Datenbank in SQL Server 2008 vorhanden ist?

13

Wie bestimme ich, ob eine Tabelle in einer SQL Server-Datenbank in SQL Server 2008 vorhanden ist?

Amir Rezaei
quelle

Antworten:

18

Wenn Sie die sysobjects-Tabelle mit einer Abfrage wie abfragen

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

xtype = 'U' ist eine Benutzertabelle

Sie können dann umbrechen, dies ist eine IF EXISTS-Anweisung

IF EXISTS (SELECT * FROM sysobjects ...)
BEGIN
    ' do your stuff here if it exists
END 
Meilen D
quelle
5
+1 Es ist wichtig zu beachten, dass Microsoft solche Funktionen seit SQL Server 2005 in Dynamic Management Views (DMVs) verschoben hat. Dies funktioniert technisch, Microsoft empfiehlt jedoch jetzt, hierfür die DMV sys.tables zu verwenden. WENN EXISTIERT (SELECT * FROM sys.tables WHERE type = 'U' AND name = 'yourTableName'). Funktionell machen Ihre Aussage und meine Aussage genau dasselbe. Ich wollte nur DMVs erwähnen. Weitere Informationen zu DMVs finden Sie in der Dokumentation msdn.microsoft.com/en-US/library/ms188754%28v=SQL.105%29.aspx
Matt M
Das ist ein guter Anruf, Matt. Alte Gewohnheiten lassen nach :-) Dein ist der bessere Weg.
Miles D
1
Ich bin mir nicht sicher, ob es einen großen Unterschied macht, aber ich würde es begrüßen, wenn EXISTS (SELECT 1 FROM sys.tables ...)
David Hayes
@DavidHayes Ja, ich denke, diese Lösung ist schneller, da nicht abgefragt wird, ob Spaltennamen gefunden werden sollen.
Xriuk
12

Hier ist ein weiterer Weg, um es zu finden

IF OBJECT_ID('tablename') IS NULL
PRINT 'Table Does not Exist'
Nomade
quelle
Schön und einfach, ohne komplexe Systemtabellen abfragen zu müssen. Vielen Dank!
Shadow The Burning Wizard
2
Würde das nicht zum Beispiel gleichnamige Ansichten erkennen? Vielleicht gespeicherte Prozeduren und so weiter?
MarioDS
Nicht, wenn Sie das Objekt im Schema qualifizieren.
Grant Fritchey
1
IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES 
           WHERE TABLE_NAME = 'your table name here')
BEGIN
  PRINT 'Table Exists'
END
Divya Diya
quelle