vorhanden istSqlHints.com

Oft stoßen wir auf ein Szenario, in dem wir Code basierend darauf ausführen müssen, ob eine Tabelle existiert oder nicht. Es gibt verschiedene Möglichkeiten, die Tabellenexistenz in SQL Server zu identifizieren, in diesem Artikel werden die verschiedenen Ansätze aufgeführt, die häufig verwendet werden, und ihre Vor- und Nachteile. Ich bevorzuge die Verwendung der Funktion OBJECT_ID (), da sie leicht zu merken ist. Lassen Sie mich wissen, welchen Ansatz Sie verwenden und warum.

Um diese verschiedenen Ansätze zu demonstrieren, erstellen wir eine Beispieldatenbank mit einer Tabelle mit dem folgenden Skript:

CREATE DATABASE SqlHintsDemoDBGOUSE SqlHintsDemoDBGOCREATE TABLE dbo.Customers (CustId INT, Name NVARCHAR(50))

Wie überprüfe ich, ob eine temporäre Tabelle in SQL Server vorhanden ist?

Ansatz 1: Verwenden von INFORMATION_SCHEMA.Tabellenansicht

Wir können eine Abfrage wie unten schreiben, um zu überprüfen, ob eine Customers-Tabelle in der aktuellen Datenbank vorhanden ist.

IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = N'Customers')BEGIN PRINT 'Table Exists'END

ERGEBNIS:
Überprüfen Sie die Tabellenexistenz mit der INFORMATION_SCHEMA-Ansicht

Die obige Abfrage überprüft die Existenz der Customers-Tabelle in allen Schemas in der aktuellen Datenbank. Wenn Sie stattdessen die Existenz der Tabelle in einem bestimmten Schema und der angegebenen Datenbank überprüfen möchten, können Sie die obige Abfrage wie folgt schreiben:

IF EXISTS (SELECT * FROM SqlHintsDemoDB.INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = N'dbo' AND TABLE_NAME = N'Customers')BEGIN PRINT 'Table Exists'END

ERGEBNIS:
Überprüfen Sie die Existenz der Tabelle mit INFORMATION_SCHEMA.Tabellen view1

Vorteile dieses Ansatzes: INFORMATION_SCHEMA-Ansichten sind auf verschiedene RDBMS-Systeme portierbar, sodass für die Portierung auf verschiedene RDBMS keine Änderungen erforderlich sind.

So überprüfen Sie, ob eine gespeicherte Prozedur in SQL Server vorhanden ist

Ansatz 2: Verwenden der Funktion OBJECT_ID()

Wir können die Funktion OBJECT_ID() wie unten verwenden, um zu überprüfen, ob eine Kundentabelle in der aktuellen Datenbank vorhanden ist.

IF OBJECT_ID(N'dbo.Customers', N'U') IS NOT NULLBEGIN PRINT 'Table Exists'END

ERGEBNIS:
Überprüfen Sie die Tabellenexistenz mit der Funktion OBJECT_ID()

Die Angabe des Datenbanknamens und des Schemanamens für den Tabellennamen ist optional. Die Angabe des Datenbanknamens und des Schemanamens bietet jedoch eine Option zum Überprüfen der Existenz der Tabelle in der angegebenen Datenbank und innerhalb eines angegebenen Schemas, anstatt die aktuelle Datenbank über alle Schemas hinweg einzuchecken. Die folgende Abfrage zeigt, dass wir, obwohl die aktuelle Datenbank eine MASTER-Datenbank ist, die Existenz der Customers-Tabelle im dbo-Schema in der SqlHintsDemoDB-Datenbank überprüfen können.

USE MASTERGOIF OBJECT_ID(N'SqlHintsDemoDB.dbo.Customers', N'U') IS NOT NULLBEGIN PRINT 'Table Exists'END

ERGEBNIS:
Überprüfen Sie die Tabellenexistenz mit OBJECT_ID() Function1

Vorteile: Leicht zu merken. Ein weiterer bemerkenswerter Punkt der Funktion OBJECT_ID() ist: Sie bietet eine Option zum Überprüfen der Existenz der temporären Tabelle, die im aktuellen Verbindungskontext erstellt wird. Bei allen anderen Ansätzen wird die Existenz der temporären Tabelle überprüft, die für den gesamten Verbindungskontext erstellt wurde, und nicht nur für den aktuellen Verbindungskontext. Die folgende Abfrage zeigt, wie die Existenz einer temporären Tabelle mit der Funktion OBJECT_ID() überprüft wird:

CREATE TABLE #TempTable(ID INT)GOIF OBJECT_ID(N'TempDB.dbo.#TempTable', N'U') IS NOT NULLBEGIN PRINT 'Table Exists'ENDGO

ERGEBNIS:
Überprüfen Sie die Existenz einer temporären Tabelle mit der Funktion OBJECT_ID()1

So überprüfen Sie, ob eine Datenbank in SQL Server vorhanden ist

Ansatz 3: Verwenden von sys.Objekte Katalogansicht

Wir können die Sys verwenden.Objekte Katalogansicht, um die Existenz der Tabelle zu überprüfen, wie unten gezeigt:

IF EXISTS(SELECT 1 FROM sys.Objects WHERE Object_id = OBJECT_ID(N'dbo.Customers') AND Type = N'U')BEGIN PRINT 'Table Exists'END

ERGEBNIS
Überprüfen Tabelle Existenz Mit Sys.Objektansicht

Überprüfen, ob ein Datensatz in einer Tabelle vorhanden ist

Ansatz 4: Verwenden von sys.Tabellen Katalogansicht

Wir können die Sys verwenden.Tabellen Katalogansicht, um die Existenz der Tabelle zu überprüfen, wie unten gezeigt:

IF EXISTS(SELECT 1 FROM sys.Tables WHERE Name = N'Customers' AND Type = N'U')BEGIN PRINT 'Table Exists'END

ERGEBNIS
Überprüfen Tabelle Existenz Mit Sys.Tabellen Katalogansicht

Sys.Tabellen Katalogansicht erbt die Zeilen aus dem Sys.Objektkatalogansicht, Sys.die Objektkatalogansicht wird als Basisansicht bezeichnet, wobei als sys.Tabellen wird als abgeleitete Ansicht bezeichnet. Sys.Tabellen geben die Zeilen nur für die Tabellenobjekte zurück, während Sys.Objektansicht Neben der Rückgabe der Zeilen für Tabellenobjekte werden Zeilen für Objekte wie gespeicherte Prozeduren, Ansichten usw. zurückgegeben.

Überprüfen, ob eine ANSICHT in SQL Server vorhanden ist

Ansatz 5: Vermeiden Sie die Verwendung von sys.sysobjects Systemtabelle

Wir sollten die Verwendung von sys vermeiden.sysobjects Systemtabelle direkt, der direkte Zugriff darauf wird in einigen zukünftigen Versionen des SQL Servers veraltet sein. Gemäß dem Microsoft BOL-Link schlägt Microsoft vor, die Katalogansichten sys zu verwenden.objekte/sys.tabellen statt sys.sysobjects Systemtabelle direkt.

IF EXISTS(SELECT name FROM sys.sysobjects WHERE Name = N'Customers' AND xtype = N'U')BEGIN PRINT 'Table Exists'END

ERGEBNIS:
Überprüfen Sie die Tabellenexistenz Mit Sys.sysobjects Systemtabelle

:
Überprüfen, ob eine Datenbank vorhanden ist
Überprüfen, ob eine gespeicherte Prozedur in SQL Server vorhanden ist
Überprüfen, ob eine Ansicht vorhanden ist
Überprüfen, ob eine temporäre Tabelle vorhanden ist
Überprüfen, ob ein Datensatz in der Tabelle vorhanden ist

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.