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 falletArtists
), 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 ochPRIMARY 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 ärnvarchar(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 tillNOT 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 datatypendate
);
- 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.