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?

2voto

Biniam Eyakem Punkte 552

Sie können dies verwenden:

     IF OBJECT_ID (N'dbo.T', N'U') IS NOT NULL 
        BEGIN 
            print 'deleted table';
            drop table t 
        END
     else 
        begin 
            print 'table not found' 
        end

 Create table t (id int identity(1,1) not null, name varchar(30) not null, lastname varchar(25) null)
 insert into t( name, lastname) values('john','doe');
 insert into t( name, lastname) values('rose',NULL);

 Select * from t
1   john    doe
2   rose    NULL

 -- clean
 drop table t

2voto

Michael Quad Punkte 79

Ich hatte einige Probleme mit der Auswahl aus INFORMATIONAL_SCHEME und OBJECT_ID. Ich weiß nicht, ob es ein Problem mit dem ODBC-Treiber oder etwas anderem ist. Abfragen von SQL Management Studio, beide, waren in Ordnung.

Hier ist die Lösung:

SELECT COUNT(*) FROM <yourTableNameHere>

Wenn die Abfrage also fehlschlägt, gibt es wahrscheinlich keine solche Tabelle in der Datenbank (oder Sie haben keine Zugriffsberechtigung dafür).

Die Prüfung erfolgt durch den Vergleich der Wert (Integer in meinem Fall) zurückgegeben von SQL Executor, die mit ODBC-Treiber beschäftigt.

if (sqlexec(conectionHandle, 'SELECT COUNT(*) FROM myTable') == -1) {
  // myTable doesn't exist..
}

0 Stimmen

Mit welchem Ergebnis schlägt es fehl?

0 Stimmen

@wscourge, SQL-Abfrage fehlgeschlagen oder etwas ähnliches. Ich prüfe nur den Rückgabewert der Executor-Funktion.

0 Stimmen

Fügen Sie es zu Ihrer Antwort hinzu

2voto

Abnous Nayyeri Punkte 1065
IF EXISTS (
SELECT *
FROM INFORMATION_SCHEMA.TABLES
WHERE 
TABLE_CATALOG = 'Database Name' and
TABLE_NAME = 'Table Name' and 
TABLE_SCHEMA = 'Schema Name') -- Database and Schema name in where statement can be deleted

BEGIN
--TABLE EXISTS
END

ELSE BEGIN
--TABLE DOES NOT EXISTS
END

1voto

phil294 Punkte 9218

Eine wichtige Information für alle, die ihre Lösung noch nicht gefunden haben: SQL-Server != MYSQL . Wenn Sie es tun wollen mit MYSQL ist es ganz einfach

    $sql = "SELECT 1 FROM `db_name`.`table_name` LIMIT 1;";
    $result = mysql_query($sql);
    if( $result == false )
        echo "table DOES NOT EXIST";
    else
        echo "table exists";

Ich poste das hier, weil es der Top-Treffer bei Google ist.

5 Stimmen

-1 weil der OP genau nach einer SQL-Server-Lösung für das Problem fragt, nicht nach einer MySQL-Lösung. Er schrieb über MySQL, weil er die Lösung für dieses DBMS kannte und dasselbe Ergebnis für SQL Server haben wollte. Außerdem ist Ihre Antwort nicht einmal eine MySQL-Abfrage, sondern ein PHP-Code, der mit MySQL funktioniert.

4 Stimmen

@mordack550, ich stimme mit Blauhirn überein. Er hat recht. Dies ist der Top-Treffer bei Google, um herauszufinden, ob eine Tabelle in SQL existiert. Seine Absichten sind gut und seine Informationen sind hilfreich. +1

1voto

IF EXISTS (   SELECT * FROM   dbo.sysobjects WHERE  id = OBJECT_ID(N'dbo.TableName') AND OBJECTPROPERTY(id, N'IsUserTable') = 1 )
BEGIN
  SELECT * FROM dbo.TableName;
END
GO

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