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?

0voto

Ich nehme hier Erstellen einer Ansicht als Beispiel .

Denn ALTER/CREATE-Befehle können nicht innerhalb von BEGIN/END-Blöcken stehen. Sie müssen das Vorhandensein einer Datei prüfen und sie vor dem Erstellen löschen

IF Object_ID('TestView') IS NOT NULL
DROP VIEW TestView

GO

CREATE VIEW TestView
   as
   . . .

GO

Wenn Sie befürchten, dass die Berechtigungen verloren gehen, können Sie auch die GRANT-Anweisungen skripten und diese am Ende erneut ausführen.

Sie könnten die Erstellung/Änderung in eine Zeichenfolge verpacken und ein EXEC ausführen - das könnte bei großen Ansichten unschön werden

DECLARE @SQL as varchar(4000)

-- set to body of view
SET @SQL = 'SELECT X, Y, Z FROM TABLE' 

IF Object_ID('TestView') IS NULL
    SET @SQL = 'CREATE VIEW TestView AS ' + @SQL
ELSE    
    SET @SQL = 'ALTER VIEW TestView AS ' + @SQL

-2voto

S Krishna Punkte 1079

Führen Sie diese Abfrage aus, um zu prüfen, ob die Tabelle in der Datenbank existiert:

IF(SELECT TABLE_NAME from INFORMATION_SCHEMA.TABLES where TABLE_NAME = 'YourTableName') IS NOT NULL
PRINT 'Table Exists';

-5voto

sumon Punkte 31

Nehmen wir an, in einer Datenbank gibt es eine Tabelle t1. Sie möchten ein Skript auf einer anderen Datenbank ausführen, z.B. - wenn t1 existiert, dann tun Sie nichts anderes, erstellen Sie t1. Um dies zu tun, öffnen Sie Visual Studio und tun Sie das Folgende:

Klicken Sie mit der rechten Maustaste auf t1, dann auf Skripttabelle als, dann auf DROP und Create To, dann auf New Query Editor

finden Sie die gewünschte Anfrage. Vergessen Sie jedoch nicht, vor der Ausführung des Skripts die Drop-Anweisung in der Abfrage auszukommentieren, da Sie keine neue Anweisung erstellen möchten, wenn es bereits eine gibt.

Gracias

0 Stimmen

In SSMS 2012 wird die if-exists-Prüfung nicht mehr durchgeführt, falls sie jemals durchgeführt wurde (ich weiß nicht mehr, wie frühere Versionen das obige Skript generiert haben). Vielleicht irren Sie sich mit der Art und Weise, wie andere DB-Tools Tabellenobjekte skripten?

0 Stimmen

SSMS führt die if-exists-Prüfung durch, wenn Sie es dazu auffordern. Extras > Optionen > SQL Server Object Explorer > Skripting > "Objekt-Skripting-Optionen": "Auf Objekt-Existenz prüfen" = Wahr

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