många gånger stöter vi på ett scenario där vi måste köra någon kod baserat på om en tabell finns eller inte. Det finns olika sätt att identifiera tabellen existens i Sql Server, i denna artikel kommer att lista ut de olika metoder som vanligen används och det är för-och nackdelar. Jag föredrar att använda OBJECT_ID () – funktionen eftersom det är lätt att komma ihåg. Låt mig veta vilket tillvägagångssätt du använder och anledning till detsamma.
för att demo dessa olika tillvägagångssätt låt oss skapa en provdatabas med en tabell med nedanstående skript:
CREATE DATABASE SqlHintsDemoDBGOUSE SqlHintsDemoDBGOCREATE TABLE dbo.Customers (CustId INT, Name NVARCHAR(50))
hur kontrollerar jag om Temp-tabell finns i Sql Server?
tillvägagångssätt 1: Använda INFORMATION_SCHEMA.Tabeller visa
vi kan skriva en fråga som nedan för att kontrollera om det finns en Kundtabell i den aktuella databasen.
IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = N'Customers')BEGIN PRINT 'Table Exists'END
resultat:
ovanstående fråga kontrollerar förekomsten av tabellen Kunder över alla scheman i den aktuella databasen. Istället för detta om du vill kontrollera förekomsten av tabellen i ett specificerat Schema och den angivna databasen kan vi skriva ovanstående fråga enligt nedan:
IF EXISTS (SELECT * FROM SqlHintsDemoDB.INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = N'dbo' AND TABLE_NAME = N'Customers')BEGIN PRINT 'Table Exists'END
resultat:
fördelar med detta tillvägagångssätt: Information_schema-vyer är bärbara över olika RDBMS-system, så portering till olika RDBMS kräver ingen förändring.
hur man kontrollerar om en lagrad procedur finns i Sql Server
tillvägagångssätt 2: Använda OBJECT_ID() funktion
vi kan använda OBJECT_ID() funktion som nedan för att kontrollera om en Kundtabell finns i den aktuella databasen.
IF OBJECT_ID(N'dbo.Customers', N'U') IS NOT NULLBEGIN PRINT 'Table Exists'END
resultat:
ange databasnamn och schemanamn delar för tabellnamnet är valfritt. Men ange databasnamn och Schema namn ger en möjlighet att kontrollera förekomsten av tabellen i den angivna databasen och inom ett angivet schema, istället för att kontrollera i den aktuella databasen över alla scheman. Nedanstående fråga visar att även om den aktuella databasen är Huvuddatabas kan vi kontrollera förekomsten av Kundtabellen i DBO-schemat i sqlhintsdemodb-databasen.
USE MASTERGOIF OBJECT_ID(N'SqlHintsDemoDB.dbo.Customers', N'U') IS NOT NULLBEGIN PRINT 'Table Exists'END
resultat:
Fördelar: Lätt att komma ihåg. En annan anmärkningsvärd punkt att nämna om OBJECT_ID () – funktionen är: det ger ett alternativ att kontrollera förekomsten av den tillfälliga tabellen som skapas i det aktuella anslutningskontexten. Alla andra tillvägagångssätt kontrollerar förekomsten av den tillfälliga tabellen som skapats över alla anslutningar sammanhang istället för bara den aktuella anslutningen sammanhang. Nedan query visar hur man kontrollerar förekomsten av en tillfällig tabell med 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:
Så här kontrollerar du om det finns en databas i Sql Server
tillvägagångssätt 3: Använda sys.Objekt Katalogvy
Vi kan använda Sys.Objekt katalogvy för att kontrollera förekomsten av tabellen som visas nedan:
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
Så här kontrollerar du om det finns en post i en tabell
tillvägagångssätt 4: Använda sys.Tabeller Katalogvy
Vi kan använda Sys.Tabeller katalogvy för att kontrollera förekomsten av tabellen som visas nedan:
IF EXISTS(SELECT 1 FROM sys.Tables WHERE Name = N'Customers' AND Type = N'U')BEGIN PRINT 'Table Exists'END
resultat
Sys.Tabeller katalogvy ärver raderna från Sys.Objekt katalogvy, Sys.objekt katalogvy kallas basvy var som sys.Tabeller kallas härledd vy. Sys.Tabeller returnerar raderna endast för Tabellobjekten medan Sys.Objektvy förutom att returnera raderna för tabellobjekt returnerar den rader för objekten som: lagrad procedur, vyer etc.
Så här kontrollerar du om det finns en vy i Sql Server
tillvägagångssätt 5: Undvik att använda sys.sysobjects systemtabell
vi bör undvika att använda sys.sysobjects Systemtabell direkt, direkt åtkomst till det kommer att avvecklas i vissa framtida versioner av Sql Server. Enligt Microsoft BOL link föreslår Microsoft att använda katalogvyn sys.objekt / sys.tabeller istället för sys.sysobjects systemet tabellen direkt.
IF EXISTS(SELECT name FROM sys.sysobjects WHERE Name = N'Customers' AND xtype = N'U')BEGIN PRINT 'Table Exists'END
resultat:
:
så här kontrollerar du om en databas finns
så här kontrollerar du om en lagrad procedur finns i Sql Server
så här kontrollerar du om en vy finns
så här kontrollerar du om Temp-tabellen finns
så här kontrollerar du om en post finns i tabellen