1418 Stimmen

Prüfen, ob die Tabelle in SQL Server existiert

Ich möchte, dass dies die ultimative Diskussion darüber ist, wie man überprüft, ob eine Tabelle in SQL Server 2000/2005 mit SQL-Anweisungen existiert.

Wenn man nach der Antwort googelt, bekommt man so viele verschiedene Antworten. Gibt es eine offizielle/abwärts- und vorwärtskompatible Methode, dies zu tun?

Hier sind zwei Möglichkeiten, wie man das machen kann. Welcher der beiden Wege ist der Standard bzw. der beste Weg, dies zu tun?

Erster Weg:

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;

Zweiter Weg:

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

MySQL bietet die einfache

SHOW TABLES LIKE '%tablename%'; 

Erklärung. Ich bin auf der Suche nach etwas Ähnlichem.

2 Stimmen

Warum ist es am besten, INFORMATION_SCHEMA.TABLES anstelle von sys.tables zu verwenden und dann nach dem Namen zu filtern und vielleicht eine type_desc-Wertprüfung hinzuzufügen?

36voto

iliketocode Punkte 6918

Ich wollte nur auf eine Situation hinweisen, in der es wahrscheinlich etwas einfacher wäre, die OBJECT_ID Methode. Die Website INFORMATION_SCHEMA Ansichten sind Objekte unter jeder Datenbank.

Die Ansichten des Informationsschemas werden in einem speziellen Schema namens INFORMATION_SCHEMA DEFINIERT. Dieses Schema ist in jeder Datenbank enthalten.

https://msdn.microsoft.com/en-us/library/ms186778.aspx

Daher sind alle Tabellen, auf die Sie mit

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

spiegelt nur das wider, was in [database] . Wenn Sie prüfen wollten, ob Tabellen in eine andere Datenbank existieren, ohne dass die [database] jedes Mal, OBJECT_ID können Sie dies sofort nach dem Auspacken tun. Ex-

IF OBJECT_ID (N'db1.schema.table1', N'U') IS NOT NULL 
   SELECT 1 AS res ELSE SELECT 0 AS res;

funktioniert genauso gut wie

IF OBJECT_ID (N'db2.schema.table1', N'U') IS NOT NULL 
   SELECT 1 AS res ELSE SELECT 0 AS res;

SQL SERVER 2016 Bearbeiten :

Ab 2016 vereinfachte Microsoft die Möglichkeit, vor dem Ablegen auf nicht vorhandene Objekte zu prüfen, indem es die if exists Schlüsselwörter zu drop Erklärungen. Zum Beispiel,

drop table if exists mytablename

bewirkt dasselbe wie OBJECT_ID / INFORMATION_SCHEMA Wrapper, in 1 Zeile Code.

https://blogs.msdn.microsoft.com/sqlserverstorageengine/2015/11/03/drop-if-exists-new-thing-in-sql-server-2016/

34voto

sansalk Punkte 4098
IF OBJECT_ID('mytablename') IS NOT NULL

17voto

Reza Jenabi Punkte 3356

Sie können folgenden Code verwenden

IF (OBJECT_ID('TableName') IS NOT NULL )
BEGIN
  PRINT 'Table Exists'
END
ELSE
BEGIN 
  PRINT 'Table NOT Exists'
END

Oder

IF (EXISTS (SELECT * FROM sys.tables WHERE [name] = 'TableName'))
BEGIN
  PRINT 'Table Exists'
END
ELSE
BEGIN 
  PRINT 'Table NOT Exists'
END

16voto

Vinko Vrsalovic Punkte 252104

Die Verwendung des Informationsschemas ist der SQL-Standard und sollte daher von allen Datenbanken, die es unterstützen, verwendet werden.

25 Stimmen

Dies hätte ein Kommentar sein sollen.

5 Stimmen

Diese Antwort muss verbessert werden.

11voto

dilip kumar singh Punkte 119
IF EXISTS 
(
    SELECT   * 
    FROM     sys.objects 
    WHERE    object_id = OBJECT_ID(N'[dbo].[Mapping_APCToFANavigator]') 
             AND 
             type in (N'U')
)
BEGIN

    -- Do whatever you need to here.

END

Hier im obigen Code lautet der Tabellenname Mapping_APCToFANavigator .

2 Stimmen

Wenn Sie Code-, XML- oder Datenbeispiele veröffentlichen, bitte Markieren Sie diese Zeilen im Texteditor und klicken Sie auf die Schaltfläche "Codebeispiele" ( { } ) in der Symbolleiste des Editors, um ihn schön zu formatieren und syntaktisch hervorzuheben!

1 Stimmen

Beachten Sie, dass der Zugriff auf Systemtabellen in zukünftigen Versionen von SQL Server möglicherweise nicht mehr möglich sein wird. Verwenden Sie stattdessen Schemaansichten.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X