sql >> Databasteknik >  >> RDS >> Sqlserver

Skapa en tabell i SQL Server 2017

Här skapar vi tre tabeller i SQL Server och analyserar sedan skriptet som skapade dem. Vi kör också ett annat skript för att verifiera att tabellen skapades.

Tidigare skapade vi en databas från ett script. Databasen är dock en tom databas — den innehåller inga tabeller eller data.

Nu ska vi skapa några tabeller för vår databas.

Först, som en uppfräschning, här är vad vi har gjort hittills:

CREATE DATABASE Music;

Det skapade en tom databas. Om du inte har gjort det än, kör det skriptet.

Kör nu följande skript:

USE Music;

CREATE TABLE Artists (
  ArtistId int IDENTITY(1,1) NOT NULL PRIMARY KEY,
  ArtistName nvarchar(255) NOT NULL,
  ActiveFrom date
);
GO

CREATE TABLE Genres (
  GenreId int IDENTITY(1,1) NOT NULL PRIMARY KEY,
  Genre nvarchar(50) NOT NULL
);

CREATE TABLE Albums (
  AlbumId int IDENTITY(1,1) NOT NULL PRIMARY KEY,
  AlbumName nvarchar(255) NOT NULL,
  ReleaseDate date NOT NULL,
  ArtistId int NOT NULL,
  GenreId int NOT NULL

  CONSTRAINT FK_Albums_Artists FOREIGN KEY (ArtistId)     
    REFERENCES dbo.Artists (ArtistId)     
    ON DELETE NO ACTION    
    ON UPDATE NO ACTION    
);

Det skriptet lägger till tre tabeller till databasen. Tabellerna kallas Artists , Genres och Albums .

Här är resultatet i SQL Operations Studio/Azure Data Studio:

Alla GUI-verktyg kommer att visa tabellerna på ungefär samma sätt. Varje tabell kan utökas för att avslöja dess kolumner, samt eventuella index, triggers, nycklar, etc. Du kan också utöka Kolumnerna nod för att visa listan över kolumner och deras datatyper, såväl som eventuella begränsningar som har angetts.

Förklaring av CREATE TABLE Uttalande

Skriptet vi just körde består av tre CREATE TABLE uttalanden — var och en skapar en annan tabell. Skriptet lägger också till en främmande nyckel-begränsning, men vi ska titta på det senare.

Låt oss nu analysera den första CREATE TABLE uttalande i vårt manus:

USE Music;

CREATE TABLE Artists (
  ArtistId int IDENTITY(1,1) NOT NULL PRIMARY KEY,
  ArtistName nvarchar(255) NOT NULL,
  ActiveFrom date
);
GO

Denna SQL-sats skapar en tabell som heter Artists med tre kolumner, kallade ArtistId , ArtistName och ActiveFrom . Varje kolumns definition börjar med dess namn, följt av dess datatyp och eventuella begränsningar som ska tillämpas på den kolumnen.

Här är en mer detaljerad "rad för rad"-beskrivning:

USE Music;
Denna del är faktiskt inte en del av CREATE TABLE påstående. Det är bara där för att växla över till Musik databas. Det kan finnas många databaser på servern och vi vill vara säkra på att vi skapar tabellerna på rätt databas. Du behöver inte den här raden om du redan arbetar i rätt databas.
CREATE TABLE Artists (
Detta är början på CREATE TABLE påstående. Det följs av tabellnamnet (i det här fallet Artists ), följt av den första av parenteserna som omsluter tabelldefinitionen.
ArtistId int IDENTITY(1,1) NOT NULL PRIMARY KEY,
Vi definierar sedan den första kolumnen. I det här fallet kallar vi det ArtistId , ange dess datatyp som ett heltal (int ), ställ in den som en identitetskolumn (denna kolumn ger tabellens unika ID, och värdet ökar med varje rad som läggs till), (1,1) betyder att värdet börjar på 1 och ökar med 1, NOT NULL betyder att fältet inte kan innehålla nollvärden och PRIMARY KEY anger denna kolumn som primärnyckel för tabellen. En primär nyckel är en kolumn som har konfigurerats som det unika identifierarfältet för tabellen.
ArtistName nvarchar(255) NOT NULL,
Nästa kolumn heter ArtistName och dess datatyp är nvarchar(255) , vilket innebär att den accepterar Unicode-strängdata med variabel längd, med en maximal längd på 255 tecken. Vi ställer också in den här kolumnen till NOT NULL så att den inte kan innehålla nollposter.
ActiveFrom date
Den sista kolumnen heter ActiveFrom och vi ställer in den för att acceptera datatypen date
);
Vi använder sedan ) för att stänga definitionen och ; för att avsluta satsen (semikolonet är en satsterminator).
GO
Signarerar slutet på en sats av Transact-SQL-satser. Detta är faktiskt inte en Transact-SQL-sats. Det är ett kommando som känns igen av verktygen sqlcmd och osql och SQL Server Management Studio Code Editor för att signalera slutet på en sats av Transact-SQL-satser.

Hur man hämtar tabellinformation när man använder ett kommandoradsverktyg

När du använder ett kommandoradsverktyg har du inte lyxen att se dina databastabeller sitta i sidopanelen och vänta på att utökas med ett enda klick. Men det betyder inte att du inte kan se information om dina tabeller eller andra databasobjekt.

När du använder ett kommandoradsverktyg kan du köra följande sats för att visa information om tabellerna i databasen ovan:

USE Music; 
SELECT column_name, data_type, character_maximum_length, is_nullable 
FROM information_schema.columns;
Resultat
column_name  data_type  character_maximum_length  is_nullable
-----------  ---------  ------------------------  -----------
ArtistId     int        null                      NO         
ArtistName   nvarchar   255                       NO         
ActiveFrom   date       null                      YES        
GenreId      int        null                      NO         
Genre        nvarchar   50                        NO         
AlbumId      int        null                      NO         
AlbumName    nvarchar   255                       NO         
ReleaseDate  date       null                      NO         
ArtistId     int        null                      NO         
GenreId      int        null                      NO         

10 row(s) returned

Executed in 1 ms

Tabellen i fråga finns i databasen som heter Musik så det är därför vi byter till det först.

Du kan också begränsa den till en specifik tabell genom att använda en WHERE klausul:

USE Music; 
SELECT column_name, data_type, character_maximum_length, is_nullable 
FROM information_schema.columns 
WHERE table_name = 'Artists';
Resultat
column_name  data_type  character_maximum_length  is_nullable
-----------  ---------  ------------------------  -----------
ArtistId     int        null                      NO         
ArtistName   nvarchar   255                       NO         
ActiveFrom   date       null                      YES        

3 row(s) returned

Executed in 1 ms

Det finns många fler fält som kan returneras av information_schema.columns . Du kan använda SELECT * för att returnera alla om du vill.

Kommandoradsmetoden för att hämta tabellinformation fungerar också när du använder ett GUI-verktyg (de är trots allt bara SQL-satser). Du kan ange samma SQL-satser för att hämta samma data oavsett om du använder sql-cli, sqlcmd, SSMS, Azure Data Studio, DBeaver eller något annat SQL Server-hanteringsverktyg:

GO Kommando

Du kan behöva lägga till GO till slutet av skriptet (när du använder sqlcmd till exempel).

Flera rader

Du kanske upptäcker att du får ett felmeddelande om du försöker sprida ovanstående skript över flera rader med ett kommandoradsverktyg.

Om så är fallet, försök att lägga till ett snedstreck i slutet av varje rad. Så här:

USE Music; \
SELECT column_name, data_type, character_maximum_length, is_nullable \
FROM information_schema.columns;

Om du inte gillar tanken på att behöva lägga till snedstreck, är ett annat alternativ att spara flerradsskriptet i en .sql-fil och sedan köra det från kommandotolken.

Metoden för att köra ett skript från kommandotolken beror på vilket kommandoradsverktyg du använder.

Så här använder du sqlcmd för att köra en fil sparad på en Windows-maskin:

sqlcmd -S myServer\instanceName -i C:\myScript.sql

Och så här använder du sql-cli för att köra en fil sparad på en Mac:

.run /myScript.sql

Uppenbarligen kommer den fullständiga sökvägen och filnamnen att bero på ditt filnamn och var du sparade det.


  1. Förstå ACID-modellen för databashantering

  2. Exportera en MySQL/MariaDB-databas

  3. Hur åtgärdar jag felet "Named Pipes Provider, error 40 - Kunde inte öppna en anslutning till" SQL Server?

  4. Verkliga exempel, när man ska använda OUTER / CROSS APPLY i SQL