SqlHints.com

mange gange støder vi på et scenarie, hvor vi skal udføre en kode baseret på, om der findes en tabel eller ej. I denne artikel vil liste de forskellige tilgange, der er almindeligt anvendt, og det er fordele og ulemper. Jeg foretrækker at bruge funktionen OBJECT_ID (), da det er let at huske. Lad mig vide, hvilken tilgang du bruger og grund til det samme.

for at demo disse forskellige tilgange, lad os oprette en prøvedatabase med en tabel ved hjælp af nedenstående script:

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

Sådan kontrolleres, om Temp-tabellen findes i

tilgang 1: Brug af INFORMATION_SCHEMA.Tabeller se

vi kan skrive en forespørgsel som nedenfor for at kontrollere, om der findes en Kundetabel i den aktuelle database.

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

resultat:
kontroller tabel eksistens ved hjælp af INFORMATION_SCHEMA Vis

ovenstående forespørgsel kontrollerer eksistensen af Kundetabellen på tværs af alle skemaerne i den aktuelle database. I stedet for dette, hvis du vil kontrollere eksistensen af tabellen i et specificeret skema og den angivne Database, kan vi skrive ovenstående forespørgsel som nedenfor:

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

resultat:
kontroller Tabeleksistens ved hjælp af INFORMATION_SCHEMA.Tabeller visning1

fordele ved denne tilgang: INFORMATION_SCHEMA-visninger er bærbare på tværs af forskellige RDBMS-systemer, så porting til forskellige RDBMS kræver ingen ændring.

Sådan kontrolleres, om der findes en gemt Procedure i Server

Approach 2: Brug af OBJECT_ID () – funktion

vi kan bruge OBJECT_ID () – funktion som nedenfor til at kontrollere, om der findes en Kundetabel i den aktuelle database.

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

resultat:
kontroller Tabeleksistens ved hjælp af OBJECT_ID() funktion

angivelse af databasens navn og Skemanavn dele til tabelnavnet er valgfrit. Men angivelse af Databasenavn og Skemanavn giver mulighed for at kontrollere eksistensen af tabellen i den angivne database og inden for et bestemt skema i stedet for at tjekke den aktuelle database på tværs af alle skemaerne. Nedenstående forespørgsel viser, at selvom den aktuelle database er MASTERDATABASE, kan vi kontrollere eksistensen af Kundetabellen i DBO-skemaet i databasen.

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

resultat:
kontroller Tabeleksistens ved hjælp af OBJECT_ID() funktion1

fordele: let at huske. Et andet bemærkelsesværdigt punkt at nævne om OBJECT_ID () – funktionen er: det giver mulighed for at kontrollere eksistensen af den midlertidige tabel, der oprettes i den aktuelle forbindelseskontekst. Alle andre tilgange kontrollerer eksistensen af den midlertidige tabel, der er oprettet på tværs af alle forbindelseskonteksten i stedet for kun den aktuelle forbindelseskontekst. Nedenstående forespørgsel viser, hvordan man kontrollerer eksistensen af en midlertidig tabel ved hjælp af OBJECT_ID () – funktion:

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

resultat:
kontroller midlertidig Tabeleksistens ved hjælp af OBJECT_ID () - funktion1

Sådan kontrolleres, om der findes en Database i SDL-serveren

tilgang 3: Brug af sys.Objektkatalogvisning

Vi kan bruge Sys.Objektkatalogvisning for at kontrollere eksistensen af tabellen som vist nedenfor:

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

resultat
kontroller Tabeleksistens ved hjælp af Sys.Objektvisning

Sådan kontrolleres, om der findes en post i en tabel

tilgang 4: Brug af sys.Tabeller Katalogvisning

Vi kan bruge Sys.Tabeller katalogvisning for at kontrollere eksistensen af tabellen som vist nedenfor:

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

resultat
kontroller Tabeleksistens ved hjælp af Sys.Tabeller Katalogvisning

Sys.Tabeller katalogvisning arver rækkerne fra Sys.Objekter katalog visning, Sys.objektkatalogvisning kaldes basisvisning hvor som sys.Tabeller kaldes afledt visning. Sys.Tabeller returnerer kun rækkerne for Tabelobjekterne, mens Sys.Objektvisning bortset fra at returnere rækkerne for tabelobjekter, returnerer den rækker for objekterne som: gemt procedure, visninger osv.

Sådan kontrolleres, om der findes en visning i server

Approach 5: undgå at bruge sys.sysobjects Systemtabel

vi bør undgå at bruge sys.sysobjects Systemtabel direkte, direkte adgang til den vil blive udskrevet i nogle fremtidige versioner af serveren. I henhold til Microsoft BOL link foreslår Microsoft at bruge katalogvisningerne sys.objekter / sys.tabeller i stedet for sys.sysobjects system tabel direkte.

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

resultat:
Check tabel eksistens ved hjælp Sys.systemtabel

:
Sådan kontrolleres, om der findes en Database
Sådan kontrolleres, om der findes en gemt Procedure i en server
Sådan kontrolleres, om der findes en visning
Sådan kontrolleres, om Temp-tabellen findes
Sådan kontrolleres, om der findes en post i tabellen

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *