sql >> Databasteknik >  >> RDS >> Sqlserver

Hur man skapar en tabell i SQL Server med hjälp av en fråga

Så här skapar du en tabell i SQL Server med en fråga:

  1. I SQL Server Management Studio klickar du på Ny fråga knappen i verktygsfältet
  2. Skriv eller klistra in en CREATE TABLE skript (exempel nedan)
  3. Klicka på ! Kör knappen i verktygsfältet

Här är ett exempel:

Skript CREATE TABLE

Här är SQL-skriptet i exemplet ovan:

CREATE TABLE Status(StatusId int IDENTITY(1,1) NOT NULL,StatusName varchar(50) NOT NULL,DateCreated datetime NOT NULL CONSTRAINT DF_Status_DateCreated DEFAULT (getdate()),CONSTRAINT PK_Status PRIMARY KEY CLUSTERED) ( före> 

Skriptet gör följande:

  • skapar en tabell
  • lägger till 3 kolumner
  • ställer in deras datatyp
  • anger att StatusId är en identitetskolumn och att värdet för den första posten kommer att vara 1, och att värdet för varje efterföljande post kommer att öka med 1
  • anger att alla värden i kolumnen Statusnamn kan ha en maximal längd på 50
  • anger att NULL-värden inte är tillåtna
  • ställer in ett standardvärde för det aktuella datumet för kolumnen DateCreated
  • ställer in StatusId-fältet som primärnyckel

Detta är ett grundläggande skript som bara skapar en liten tabell. Du kan lika gärna köra ett skript som skapar en hel databas, med alla dess objekt och data och behörigheter på en gång.

Förbättra skriptet

När du skapar databasobjekt är det bra att kontrollera om objektet redan finns eller inte. Detta förhindrar att fel uppstår när skriptet försöker skapa en tabell som redan finns i databasen.

Kör bara om tabellen inte redan finns

Följande rad kan läggas till i skriptet ovan, så att skriptet CREATE TABLE endast körs om tabellen inte redan finns i databasen (eller en tabell med samma namn):

OM INTE FINNS (VÄLJ * FRÅN sysobjects WHERE name='Status' OCH xtype='U')

Så hela manuset skulle bli:

OM INTE FINNS (SELECT * FROM sysobjects WHERE name='Status' AND xtype='U')CREATE TABLE Status(StatusId int IDENTITY(1,1) NOT NULL,StatusName varchar(50) NOT NULL,DateCreated datetime NOT NULL CONSTRAINT DF_Status_DateCreated DEFAULT (getdate()),CONSTRAINT PK_Status PRIMARY KEY CLUSTERED (StatusId))

Byt ut tabellen om den redan finns

Skriptet kan också skrivas om för att ersätta tabellen om den redan finns. Detta kan göras genom att först släppa den befintliga tabellen och sedan skapa den nya.

SQL Server 2016

SQL Server 2016 introducerade DROP IF EXISTS-klausulen. Så i SQL Server 2016 kan vi lägga till följande till toppen av skriptet:

SLIPPA TABELL OM FINNS [TaskTracker].[Status]

(TaskTracker är namnet på databasen. Status är namnet på tabellen).

SLAPP TABELL OM FINNS [TaskTracker].[Status]SKAPA TABELL Status(StatusId int IDENTITY(1,1) NOT NULL,StatusName varchar(50) NOT NULL,DateCreated datetime NOT NULL CONSTRAINT DF_Status_DateCreated()FAULT), ( CONSTRAINT PK_Status PRIMÄRNYCKEL KLUSTERAD (StatusId))

SQL Server 2014 och tidigare

Om du använder en tidigare version av SQL Server kan du använda följande för att ta bort den befintliga tabellen:

OM FINNS (VÄLJ * FRÅN sysobjects WHERE name='Status' AND xtype='U')SLIP TABELL Status

Så hela manuset skulle bli:

OM FINNS (VÄLJ * FRÅN sysobjects WHERE name='Status' AND xtype='U')DROP TABLE StatusCREATE TABLE Status(StatusId int IDENTITY(1,1) NOT NULL,StatusName varchar(50) NOT NULL,DateCreated datetime NOT NULL CONSTRAINT DF_Status_DateCreated DEFAULT (getdate()),CONSTRAINT PK_Status PRIMÄRNYCKEL CLUSTERED (StatusId))

Generera ett skript från en befintlig tabell

Du kan generera ett SQL-skript från en befintlig tabell via Objektutforskaren i SSMS GUI. När du gör detta genererar SQL Server all SQL-kod från tabellen och skapar skriptet.

För att göra detta, högerklicka helt enkelt på tabellen och välj Skripttabell som... följ sedan anvisningarna.

Detta är inte bara begränsat till tabeller – du kan skripta vilket databasobjekt som helst med samma metod.

Om du är ny på att skapa SQL-skript kan du prova att skapa en tabell med hjälp av GUI och sedan generera SQL-skriptet från tabellen.


  1. är det möjligt att välja FINNS direkt som lite?

  2. SQL Server Error 110:Det finns färre kolumner i INSERT-satsen än de värden som anges i VALUES-satsen.

  3. Kul med (columnstore) komprimering på ett väldigt stort bord – del 3

  4. Oracle exekveringsplaner när du använder LIKE-operatorn med en DETERMINISTISK funktion