T-SQL bevat niet de IF NOT EXISTS
clausule met zijn CREATE TABLE
statement, zoals sommige andere DBMS'en doen.
Als we daarom willen controleren op het bestaan van de tabel voordat we deze in SQL Server maken, moeten we andere methoden gebruiken.
Optie 1:controleer de object-ID
In SQL Server kunnen we de OBJECT_ID()
. gebruiken functie om te controleren of de tabel bestaat voordat we deze proberen te maken:
IF OBJECT_ID(N'dbo.t1', N'U') IS NULL
CREATE TABLE dbo.t1 (
c1 int,
c2 varchar(10)
);
GO
Het bovenstaande voorbeeld controleert de object-ID voor een dbo.t1
tafel.
Het tweede argument voor OBJECT_ID()
specificeert het type object waarnaar we op zoek zijn. In dit geval gebruiken we U
, wat voor "door de gebruiker gedefinieerde tabel" is.
De OBJECT_ID()
retourneert het identificatienummer van het databaseobject van een object met een schemabereik. Als het object niet bestaat, of als u er geen toegang toe hebt, retourneert de functie NULL. Daarom kunnen we controleren op een NULL-waarde en de tabel alleen maken als deze functie NULL retourneert.
We kunnen de OBJECT_ID()
. gebruiken functie om de object-ID van de tabel te controleren zodra deze is gemaakt:
SELECT OBJECT_ID(N'dbo.t1', N'U');
Voorbeeld resultaat:
354100302
Als we wat meer informatie wilden, zouden we zoiets als dit kunnen doen:
sp_tables 't1';
Resultaat:
+-------------------+---------------+--------------+--------------+-----------+ | TABLE_QUALIFIER | TABLE_OWNER | TABLE_NAME | TABLE_TYPE | REMARKS | |-------------------+---------------+--------------+--------------+-----------| | KrankyKranes | dbo | t1 | TABLE | NULL | +-------------------+---------------+--------------+--------------+-----------+
Hier, KrankyKranes
is de database waarin ik de tabel heb gemaakt.
Er zijn veel andere manieren om naar bestaande tabellen te kijken. Zie 6 manieren om te controleren of een tabel bestaat in SQL Server voor voorbeelden.
Optie 2:Query sys.tables
Een andere manier om te controleren of een tabel al bestaat, is door de sys.tables
. op te vragen systeemcatalogusweergave.
Voorbeeld:
IF NOT EXISTS (
SELECT * FROM sys.tables t
JOIN sys.schemas s ON (t.schema_id = s.schema_id)
WHERE s.name = 'dbo' AND t.name = 't1')
CREATE TABLE dbo.t1 (
c1 int,
c2 varchar(10)
);
Dat doet hetzelfde als het vorige voorbeeld; het controleert op het bestaan van de tabel en maakt het alleen aan als het niet bestaat.
Ongeacht de methode die wordt gebruikt om te controleren of de tabel bestaat, wordt de opdracht met succes voltooid, ongeacht of de tabel bestaat of niet.
We krijgen dus de volgende output van beide methoden:
Commands completed successfully.
Ik krijg die melding of de tabel al bestond of niet.
Als de tabel al bestaat, maar we niet controleren of de tabel bestaat, krijgen we een foutmelding als deze:
Msg 2714, Level 16, State 6, Line 1 There is already an object named 't1' in the database.
Het is belangrijk op te merken dat, alleen omdat er al een tabel met die naam in de database bestaat, dit niet betekent dat deze de juiste definitie heeft. De bovenstaande methoden zoeken eenvoudig naar de tabel op naam en schema.