sql >> Database >  >> RDS >> Sqlserver

2 manieren om een ​​tabel te maken als deze niet bestaat in SQL Server

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.


  1. Kan de 'libpq-fe.h header niet vinden bij het installeren van pg gem

  2. Selecteer laatste rij in MySQL

  3. MySQL 8.0 - Client ondersteunt geen authenticatieprotocol dat door de server is aangevraagd; overweeg om MySQL-client te upgraden

  4. JSON_LENGTH() – Retourneert de lengte van een JSON-document in MySQL