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:
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:
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:
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:
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:
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
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
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:
:
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