SqlHints.com

vaak komen we een scenario tegen waarin we een code moeten uitvoeren op basis van of een tabel bestaat of niet. Er zijn verschillende manieren van het identificeren van de tabel bestaan in Sql Server, in dit artikel zal een lijst van de verschillende benaderingen die vaak worden gebruikt en het is voors en tegens. Ik gebruik liever de OBJECT_ID () functie omdat het makkelijk te onthouden is. Laat me weten welke aanpak je gebruikt en waarom.

om deze verschillende benaderingen te demonstreren, kunnen we een voorbeelddatabase maken met een tabel met het onderstaande script:

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

Hoe te controleren of Temp table bestaat in Sql Server?

benadering 1: gebruik van INFORMATION_SCHEMA.TABLES view

we kunnen een query schrijven zoals hieronder om te controleren of een klantentabel bestaat in de huidige database.

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

resultaat:
controleer de aanwezigheid van de tabel met behulp van INFORMATION_SCHEMA view

de bovenstaande query controleert het bestaan van de klantentabel in alle schema ‘ s in de huidige database. In plaats van dit als u het bestaan van de tabel in een opgegeven Schema en de opgegeven Database wilt controleren, kunnen we de bovenstaande query schrijven zoals hieronder:

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

resultaat:
controleer de Existantie van de tabel met behulp van INFORMATION_SCHEMA.Tabellen view1

voors van deze benadering: INFORMATIE_SCHEMA weergaven zijn draagbaar over verschillende RDBMS-systemen, dus porten naar verschillende RDBMS vereist geen verandering.

hoe te controleren of een opgeslagen Procedure bestaat in Sql Server

benadering 2: met behulp van OBJECT_ID() functie

we kunnen OBJECT_ID() functie gebruiken zoals hieronder om te controleren of er een klantentabel bestaat in de huidige database.

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

resultaat:
controletabel bestaat met behulp van OBJECT_ID() functie

het specificeren van de databasenaam en Schemanaamdelen voor de tabelnaam is optioneel. Maar het opgeven van databasenaam en schemanaam biedt een optie om het bestaan van de tabel in de opgegeven database en binnen een opgegeven schema te controleren, in plaats van het controleren in de huidige database over alle schema ‘ s. De onderstaande query laat zien dat, hoewel de huidige database MASTER database is, we het bestaan van de klantentabel in het dbo schema in de sqlhintsdemodb database kunnen controleren.

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

resultaat:
controletabel bestaat met behulp van OBJECT_ID() Function1

Pros: gemakkelijk te onthouden. Een ander opmerkelijk punt om te vermelden over OBJECT_ID () functie is: het biedt een optie om het bestaan van de tijdelijke tabel die is gemaakt in de huidige verbindingscontext te controleren. Alle andere benaderingen controleren het bestaan van de tijdelijke tabel gemaakt over alle verbindingen context in plaats van alleen de huidige verbinding context. Onderstaande query laat zien hoe het bestaan van een tijdelijke tabel te controleren met behulp van OBJECT_ID () functie:

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

resultaat:
controleer het bestaan van een tijdelijke tabel met behulp van OBJECT_ID() Function1

hoe te controleren of een Database bestaat in Sql Server

benadering 3: Gebruik van sys.Objects Catalog View

We kunnen de Sys gebruiken.Objectencatalogus om het bestaan van de tabel te controleren zoals hieronder getoond:

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

resultaat
controleer de aanwezigheid van de tabel met behulp van Sys.Objectenweergave

hoe te controleren of een record bestaat in een tabel

benadering 4: sys gebruiken.Tabellen catalogusweergave

We kunnen de Sys gebruiken.Tables catalog view om het bestaan van de tabel te controleren zoals hieronder getoond:

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

resultaat
controleer de aanwezigheid van de tabel met behulp van Sys.Tabellen catalogusweergave

Sys.Tabellen catalogusweergave erft de rijen van de Sys.Objecten catalogusweergave, Sys.objects catalog view wordt aangeduid als basisweergave waar als sys.Tabellen wordt aangeduid als afgeleide weergave. Sys.Tabellen retourneren de rijen alleen voor de tabelobjecten terwijl Sys.Objectweergave naast het retourneren van de rijen voor tabelobjecten, retourneert het rijen voor de objecten zoals: opgeslagen procedure, weergaven enz.

controleren of een weergave bestaat in Sql Server

benadering 5: vermijd het gebruik van sys.sysobjects systeemtabel

we moeten het gebruik van sys vermijden.sysobjects System Table direct, directe toegang tot het zal worden afgeraden in sommige toekomstige versies van de SQL Server. Volgens Microsoft BOL link, Microsoft stelt voor om de catalog views sys gebruiken.objecten / sys.tafels in plaats van sys.sysobjects systeemtabel direct.

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

resultaat:
controletabel bestaat met behulp van Sys.sysobjects System Table

:
Hoe te controleren of een Database bestaat
Hoe te controleren of een opgeslagen Procedure bestaat in SQL Server
Hoe te controleren of een weergave bestaat
Hoe te controleren of een tijdelijke tabel bestaat
Hoe te controleren of een record bestaat in tabel

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *