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?

1voto

Jitan Gupta Punkte 318

Es gibt eine weitere Option, um zu prüfen, ob die Tabelle datenbankübergreifend existiert

IF EXISTS(SELECT 1 FROM [change-to-your-database].SYS.TABLES WHERE NAME = 'change-to-your-table-name')
BEGIN
    -- do whatever you want
END

0voto

user3651072 Punkte 1

Wenn dies die "ultimative" Diskussion sein soll, dann sollte angemerkt werden, dass Larry Leonards Skript auch einen entfernten Server abfragen kann, wenn die Server verbunden sind.

if exists (select * from REMOTE_SERVER.MyOtherDatabase.sys.tables where name = 'MyTable')
    print 'Exists'

0 Stimmen

Vielleicht ist es besser, dies als Kommentar zu Leonards Antwort hinzuzufügen oder vielleicht als Edit?

0voto

MarceloMadnezz Punkte 287
select name from SysObjects where xType='U' and name like '%xxx%' order by name

0voto

Maslow Punkte 17969

Wenn jemand versucht, diese gleiche Sache in linq to sql (oder vor allem linqpad) zu tun, aktivieren Sie die Option, um Systemtabellen und Ansichten einzuschließen und diesen Code zu tun:

let oSchema = sys.Schemas.FirstOrDefault(s=>s.Name==a.schema )
where oSchema !=null
let o=oSchema!=null?sys.Objects.FirstOrDefault (o => o.Name==a.item && o.Schema_id==oSchema.Schema_id):null
where o!=null

wenn Sie ein Objekt mit dem Namen in einer Eigenschaft namens item und das Schema in einer Eigenschaft namens schema haben, wobei der Name der Quellvariablen a

0voto

Mathieu Dierckx Punkte 94

-- Prozedur erstellen, um zu prüfen, ob eine Tabelle existiert


DELIMITER $$

DROP PROCEDURE IF EXISTS `checkIfTableExists`;

CREATE PROCEDURE checkIfTableExists(
    IN databaseName CHAR(255),
    IN tableName CHAR(255),
    OUT boolExistsOrNot CHAR(40)
)

  BEGIN
      SELECT count(*) INTO boolExistsOrNot FROM information_schema.TABLES
      WHERE (TABLE_SCHEMA = databaseName)
      AND (TABLE_NAME = tableName);
  END $$

DELIMITER ;

-- -- Verwendung : prüfen, ob Tabellenmigrationen existieren


 CALL checkIfTableExists('muDbName', 'migrations', @output);

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