mange ganger kommer vi over et scenario der vi må utføre noen kode basert på Om Et Bord eksisterer eller ikke. Det er forskjellige måter å identifisere Tabellen eksistens I Sql Server, i denne artikkelen vil liste ut de ulike tilnærminger som brukes ofte, og det er fordeler og ulemper. JEG foretrekker Å bruke OBJECT_ID () – funksjonen som det er lett å huske. Gi meg beskjed om hvilken tilnærming du bruker og grunnen til det samme.
for å demo disse forskjellige tilnærmingene, la oss lage en eksempeldatabase med et bord ved skriptet nedenfor:
CREATE DATABASE SqlHintsDemoDBGOUSE SqlHintsDemoDBGOCREATE TABLE dbo.Customers (CustId INT, Name NVARCHAR(50))
hvordan sjekke Om Temp-tabellen finnes i Sql Server?
Tilnærming 1: Bruke INFORMATION_SCHEMA.TABELLER vis
vi kan skrive en spørring som nedenfor for å sjekke om Det finnes En Kundetabell i gjeldende database.
IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = N'Customers')BEGIN PRINT 'Table Exists'END
RESULTAT:
spørringen ovenfor kontrollerer Eksistensen Av Kundetabellen på tvers av alle skjemaene i gjeldende database. I stedet for dette hvis Du vil sjekke Eksistensen Av Tabellen i et spesifisert Skjema og Den Angitte Databasen, kan vi skrive ovennevnte spørring 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:
pros av Denne Tilnærmingen: INFORMATION_SCHEMA visninger er bærbare på tvers av ULIKE RDBMS systemer, så porting til ulike RDBMS krever ingen endring.
hvordan sjekke om En Lagret Prosedyre finnes I Sql Server
Tilnærming 2: Bruke OBJECT_ID () funksjon
VI kan bruke OBJECT_ID () funksjon som nedenfor for å sjekke om En Kunder Tabellen finnes i gjeldende database.
IF OBJECT_ID(N'dbo.Customers', N'U') IS NOT NULLBEGIN PRINT 'Table Exists'END
RESULTAT:
Angi Databasenavn og Skjema Navn deler For Tabellnavnet er valgfritt. Men å angi Databasenavn og Skjemanavn gir et alternativ for å kontrollere eksistensen av tabellen i den angitte databasen og i et angitt skjema, i stedet for å sjekke inn den gjeldende databasen på tvers av alle skjemaene. Spørringen nedenfor viser at selv om gjeldende database ER HOVEDDATABASE, kan vi kontrollere Eksistensen Av Kunder-tabellen i dbo-skjemaet I sqlhintsdemodb-databasen.
USE MASTERGOIF OBJECT_ID(N'SqlHintsDemoDB.dbo.Customers', N'U') IS NOT NULLBEGIN PRINT 'Table Exists'END
RESULTAT:
Pros: Lett å huske. ET annet bemerkelsesverdig poeng å nevne OM OBJECT_ID () – funksjonen er: det gir et alternativ for å sjekke eksistensen Av Den Midlertidige Tabellen som er opprettet i gjeldende tilkoblingssammenheng. Alle Andre Tilnærminger kontrollerer eksistensen Av Den Midlertidige Tabellen som er opprettet på tvers av alle tilkoblingskonteksten i stedet for bare gjeldende tilkoblingskontekst. Under spørringen viser hvordan du kontrollerer eksistensen Av En Midlertidig Tabell VED HJELP AV OBJECT_ID () funksjon:
CREATE TABLE #TempTable(ID INT)GOIF OBJECT_ID(N'TempDB.dbo.#TempTable', N'U') IS NOT NULLBEGIN PRINT 'Table Exists'ENDGO
RESULTAT:
hvordan sjekke om Det finnes En Database i Sql Server
Tilnærming 3: Bruke sys.Objekter Katalogvisning
Vi kan bruke Sys.Objekter katalogvisning for å sjekke Eksistensen Av 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
slik kontrollerer du om det finnes en post i en tabell
Tilnærming 4: Bruke sys.Tabeller Katalogvisning
Vi kan bruke Sys.Tabeller katalogvisning for å sjekke Eksistensen Av 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
Sys.Tabeller katalogvisning arver radene fra Sys.Objekter katalogvisning, Sys.objekter katalogvisning er referert til som basisvisning der som sys.Tabeller kalles avledet visning. Sys.Tabeller vil returnere radene bare For Tabellobjektene mens Sys.Objektvisning bortsett fra å returnere radene for tabellobjekter, returnerer den rader for objektene som: lagret prosedyre, visninger etc.
slik kontrollerer du om DET finnes EN VISNING i Sql Server
Tilnærming 5: Unngå å Bruke sys.sysobjects Systemtabell
vi bør unngå å bruke sys.sysobjects Systemtabell direkte, direkte tilgang til den vil bli avskrevet i noen fremtidige versjoner Av Sql Server. I Henhold Til Microsoft BOL link, Foreslår Microsoft å bruke katalogvisningene sys.objekter / sys.tabeller i stedet for sys.sysobjects systemtabell direkte.
IF EXISTS(SELECT name FROM sys.sysobjects WHERE Name = N'Customers' AND xtype = N'U')BEGIN PRINT 'Table Exists'END
RESULTAT:
:
hvordan sjekke Om En Database eksisterer
hvordan sjekke Om En Lagret Prosedyre eksisterer i Sql Server
hvordan sjekke om En Visning eksisterer
hvordan sjekke Om Temp-tabellen eksisterer
Hvordan sjekke om en post eksisterer i tabell