sql >> Database teknologi >  >> RDS >> Sqlserver

2 måder at oprette en tabel på, hvis den ikke findes i SQL Server

T-SQL inkluderer ikke HVIS IKKE FINDER klausul med dens CREATE TABLE sætning, ligesom nogle andre DBMS'er gør.

Derfor, hvis vi vil kontrollere, om tabellen findes, før vi opretter den i SQL Server, skal vi bruge andre metoder.

Mulighed 1:Tjek objekt-id'et

I SQL Server kan vi bruge OBJECT_ID() funktion til at kontrollere, om tabellen findes, før vi forsøger at oprette den:

IF OBJECT_ID(N'dbo.t1', N'U') IS NULL
CREATE TABLE dbo.t1 (
    c1 int,
    c2 varchar(10)
    );
GO

Ovenstående eksempel kontrollerer objekt-id'et for en dbo.t1 tabel.

Det andet argument til OBJECT_ID() angiver den type objekt, vi leder efter. I dette tilfælde bruger vi U , som er for "brugerdefineret tabel".

OBJECT_ID() returnerer databaseobjektets identifikationsnummer for et skema-omfattet objekt. Hvis objektet ikke eksisterer, eller hvis du ikke har adgang til det, returnerer funktionen NULL. Derfor kan vi tjekke for en NULL-værdi og kun oprette tabellen, hvis denne funktion returnerer NULL.

Vi kan bruge OBJECT_ID() funktion til at kontrollere tabellens objekt-id, når den er blevet oprettet:

SELECT OBJECT_ID(N'dbo.t1', N'U');

Eksempelresultat:

354100302

Hvis vi ville have lidt mere information, kunne vi gøre noget som dette:

sp_tables 't1';

Resultat:

+-------------------+---------------+--------------+--------------+-----------+
| TABLE_QUALIFIER   | TABLE_OWNER   | TABLE_NAME   | TABLE_TYPE   | REMARKS   |
|-------------------+---------------+--------------+--------------+-----------|
| KrankyKranes      | dbo           | t1           | TABLE        | NULL      |
+-------------------+---------------+--------------+--------------+-----------+

Her, KrankyKranes er den database, som jeg oprettede tabellen i.

Der er mange andre måder at se på eksisterende tabeller. Se 6 måder at kontrollere, om der findes en tabel i SQL Server for eksempler.

Mulighed 2:Forespørg sys.tables

En anden måde at kontrollere, om en tabel allerede eksisterer på, er at forespørge sys.tables systemkatalogvisning.

Eksempel:

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)
        );

Det gør noget lignende som det forrige eksempel; den kontrollerer for eksistensen af ​​tabellen og opretter den kun, hvis den ikke eksisterer.

Uanset hvilken metode der bruges til at kontrollere tabellens eksistens, fuldføres kommandoen med succes, uanset om tabellen eksisterer eller ej.

Så vi får følgende output fra begge metoder:

Commands completed successfully.

Jeg får den besked, uanset om tabellen allerede eksisterede eller ej.

Hvis tabellen allerede eksisterer, men vi ikke kontrollerer, om tabellen findes, får vi en fejl som denne:

Msg 2714, Level 16, State 6, Line 1
There is already an object named 't1' in the database.

Det er vigtigt at bemærke, at bare fordi en tabel med det navn allerede findes i databasen, betyder det ikke, at den har den korrekte definition. Ovenstående metoder søger blot efter tabellen ved navn og skema.


  1. SQL Server, konvertere en navngiven instans til standardinstans?

  2. Beregn tidsforskellen mellem to rækker

  3. Vælg de 3 seneste poster, hvor værdierne i én kolonne er forskellige

  4. Hvordan man ikke viser dubletter i SQL