– ben SqlHints.com

sokszor találkozunk egy olyan forgatókönyvvel, ahol valamilyen kódot kell végrehajtanunk annak alapján, hogy létezik-e táblázat vagy sem. Vannak különböző módon azonosítja a tábla létezését Sql Server, ebben a cikkben felsorolja a különböző megközelítések, amelyek általánosan használt, és ez a profik és hátrányok. Inkább az OBJECT_ID() függvényt használom, mivel könnyen megjegyezhető. Tudassa velem, hogy melyik megközelítést használja, és miért ugyanaz.

a különböző megközelítések bemutatásához hozzon létre egy minta adatbázist egy táblázattal az alábbi szkript szerint:

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

Hogyan ellenőrizhető, hogy létezik-e Temp tábla Az Sql Serverben?

1. megközelítés: INFORMATION_SCHEMA használata.Táblázatok nézet

az alábbi lekérdezést írhatjuk le, hogy ellenőrizzük, létezik-e ügyfél táblázat az aktuális adatbázisban.

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

eredmény:
check Table Existance using INFORMATION_SCHEMA view

a fenti lekérdezés az aktuális adatbázisban szereplő összes sémán keresztül ellenőrzi az ügyfelek táblázatát. Ahelyett, hogy ez, ha azt szeretnénk, hogy ellenőrizze a létezését a táblázat egy meghatározott séma, valamint a megadott adatbázisban, akkor írhatjuk a fenti lekérdezés az alábbiak szerint:

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

eredmény:
ellenőrizze táblázat távolság segítségével INFORMATION_SCHEMA.Táblázatok view1

a megközelítés előnyei: INFORMATION_SCHEMA nézetek hordozható különböző RDBMS rendszerek, így portolás különböző RDBMS nem igényel semmilyen változást.

hogyan lehet ellenőrizni, hogy létezik-e tárolt eljárás az Sql Serverben

2 megközelítés: az OBJECT_ID() függvény használata

az OBJECT_ID() függvényt az alábbi módon használhatjuk annak ellenőrzésére, hogy létezik-e ügyfél táblázat az aktuális adatbázisban.

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

eredmény:
check Table Existance using OBJECT_ID() Function

az adatbázis nevének és sémanév-részeinek megadása nem kötelező. De az adatbázisnév és a séma Név megadása lehetőséget ad arra, hogy a megadott adatbázisban, illetve egy meghatározott sémán belül ellenőrizzük a táblázat létezését, ahelyett, hogy az aktuális adatbázisban ellenőriznénk az összes sémát. Az alábbi lekérdezés azt mutatja, hogy annak ellenére, hogy a jelenlegi adatbázis mester adatbázis, ellenőrizhetjük az ügyfelek táblájának létezését a dbo sémában az SqlHintsDemoDB adatbázisban.

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

eredmény:
check Table Existance segítségével OBJECT_ID() Function1

előnyök: könnyen megjegyezhető. Egy másik figyelemre méltó pont, amelyet meg kell említeni az OBJECT_ID () függvényről: lehetőséget biztosít az aktuális kapcsolat kontextusában létrehozott ideiglenes táblázat létezésének ellenőrzésére. Az összes többi megközelítés ellenőrzi az összes kapcsolat kontextusában létrehozott ideiglenes táblázat létezését, nem csak az aktuális kapcsolatkörnyezetet. Az alábbi lekérdezés megmutatja, hogyan lehet ellenőrizni egy ideiglenes tábla létezését az OBJECT_ID() funkció segítségével:

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

eredmény:
ellenőrizze az ideiglenes tábla létezését az OBJECT_ID () Function1

hogyan lehet ellenőrizni, hogy létezik-e adatbázis az Sql Serverben

megközelítés 3: Sys használata.Objektumok katalógus nézet

tudjuk használni a Sys.Objektumok katalógus megtekintése, hogy ellenőrizze a létezését a táblázat az alábbiak szerint:

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

eredmény
ellenőrizze táblázat távolság segítségével Sys.Objektumok nézet

hogyan lehet ellenőrizni, hogy létezik-e rekord a táblázatban

megközelítés 4: Sys használata.Táblázatok katalógus nézet

tudjuk használni a Sys.Táblázatok katalógus megtekintése, hogy ellenőrizze a létezését a táblázat az alábbiak szerint:

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

eredmény
ellenőrizze táblázat távolság segítségével Sys.Táblázatok katalógus nézet

Sys.Táblázatok katalógus nézet örökli a sorok a Sys.Objektumok katalógus nézet, Sys.objektumok katalógus nézet nevezzük Alap nézet, ahol a sys.Táblázatok nevezik származtatott nézet. Sys.A táblázatok csak a Táblázatobjektumokhoz adják vissza a sorokat, míg a Sys.Objektum nézet az asztali objektumok sorainak visszaadásán kívül sorokat ad vissza az objektumokhoz, például: tárolt eljárás, nézetek stb.

hogyan lehet ellenőrizni, hogy létezik-e nézet az Sql Serverben

5 megközelítés: kerülje a sys használatát.sysobjects System table

kerülni kell a sys használatát.a Sysobjects Rendszertábla közvetlenül, a közvetlen hozzáférés az SQL Server néhány jövőbeli verziójában elavult. A Microsoft Bol link szerint a Microsoft azt javasolja,hogy használja a katalógus nézeteit.objektumok / sys.táblázatok helyett sys.sysobjects rendszer tábla közvetlenül.

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

eredmény:
check Table Existance Using Sys.sysobjects System Table

:
Hogyan lehet ellenőrizni, hogy létezik-e Adatbázis
Hogyan lehet ellenőrizni, hogy létezik-e tárolt eljárás az Sql Serverben
Hogyan lehet ellenőrizni, hogy létezik-e nézet
Hogyan lehet ellenőrizni, hogy létezik-e Temp tábla
Hogyan lehet ellenőrizni, hogy létezik-e rekord a táblázatban

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük