Her opretter vi tre tabeller i SQL Server, hvorefter vi analyserer scriptet, der skabte dem. Vi kører også et andet script for at bekræfte, at tabellen blev oprettet.
Tidligere lavede vi en database ud fra et script. Databasen er dog en tom database — den indeholder ingen tabeller eller data.
Nu skal vi lave nogle tabeller til vores database.
Først, som en genopfriskning, her er hvad vi har gjort indtil videre:
CREATE DATABASE Music;
Det skabte en tom database. Hvis du ikke har gjort det endnu, så kør det script.
Kør nu følgende script:
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 script tilføjer tre tabeller til databasen. Tabellerne kaldes Artists
, Genres
, og Albums
.
Her er resultatet i SQL Operations Studio/Azure Data Studio:
Ethvert GUI-værktøj vil vise tabellerne på stort set samme måde. Hver tabel kan udvides for at afsløre dens kolonner, såvel som eventuelle indekser, udløsere, nøgler osv. Du kan også udvide Kolonner node for at afsløre listen over kolonner og deres datatyper samt eventuelle begrænsninger, der er angivet.
Forklaring af CREATE TABLE
Erklæring
Det script, vi lige har kørt, består af tre CREATE TABLE
udsagn - hver enkelt opretter en anden tabel. Scriptet tilføjer også en fremmednøglebegrænsning, men det vil vi se på senere.
Indtil videre, lad os analysere den første CREATE TABLE
udsagn i vores script:
USE Music; CREATE TABLE Artists ( ArtistId int IDENTITY(1,1) NOT NULL PRIMARY KEY, ArtistName nvarchar(255) NOT NULL, ActiveFrom date ); GO
Denne SQL-sætning opretter en tabel kaldet Artists
med tre kolonner, kaldet ArtistId
, ArtistName
og ActiveFrom
. Hver kolonnes definition begynder med dens navn, efterfulgt af dens datatype og eventuelle begrænsninger, der skal anvendes på denne kolonne.
Her er en mere detaljeret "linje for linje" beskrivelse:
USE Music;
- Denne del er faktisk ikke en del af
CREATE TABLE
udmelding. Det er kun der for at skifte over til Musik database. Der kan være mange databaser på serveren, og vi vil være sikre på, at vi opretter tabellerne på den rigtige database. Du behøver ikke denne linje, hvis du allerede arbejder i den korrekte database. CREATE TABLE Artists (
- Dette er starten på
CREATE TABLE
udmelding. Det efterfølges af tabelnavnet (i dette tilfældeArtists
), efterfulgt af den første af parenteserne, der omslutter tabeldefinitionen. ArtistId int IDENTITY(1,1) NOT NULL PRIMARY KEY,
- Derefter definerer vi den første kolonne. I dette tilfælde kalder vi det
ArtistId
, angiv dens datatype som et heltal (int
), indstil den som en indentitetskolonne (denne kolonne vil give tabellens unikke ID, og værdien vil stige med hver tilføjet række),(1,1)
betyder, at værdien starter ved 1 og stiger med 1,NOT NULL
betyder, at feltet ikke kan indeholde null-værdier ogPRIMARY KEY
indstiller denne kolonne som den primære nøgle til tabellen. En primær nøgle er en kolonne, der er konfigureret som det unikke identifikatorfelt for tabellen. ArtistName nvarchar(255) NOT NULL,
- Den næste kolonne hedder
ArtistName
og dens datatype ernvarchar(255)
, hvilket betyder, at den accepterer Unicode-strengdata med variabel længde, med en maksimal længde på 255 tegn. Vi indstiller også denne kolonne tilNOT NULL
så den ikke kan indeholde nul-indgange. ActiveFrom date
- Den sidste kolonne hedder
ActiveFrom
og vi indstiller den til at acceptere en datatypedate
);
- Vi bruger derefter
)
for at lukke definitionen, og;
for at afslutte sætningen (semikolonet er en sætningsafslutning). GO
- Signerer slutningen af en batch af Transact-SQL-sætninger. Dette er faktisk ikke en Transact-SQL-erklæring. Det er en kommando, der genkendes af sqlcmd- og osql-værktøjerne og SQL Server Management Studio Code Editor for at signalere slutningen af en batch af Transact-SQL-sætninger.
Sådan hentes tabeloplysninger, når du bruger et kommandolinjeværktøj
Når du bruger et kommandolinjeværktøj, har du ikke den luksus at se dine databasetabeller sidde i sidepanelet og vente på at blive udvidet med et enkelt klik. Men det betyder ikke, at du ikke kan se information om dine tabeller eller andre databaseobjekter.
Når du bruger et kommandolinjeværktøj, kan du køre følgende sætning for at vise information om tabellerne i ovenstående database:
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
Den pågældende tabel er i databasen kaldet Musik så det er derfor, vi skifter til det først.
Du kan også indsnævre den til en specifik tabel ved at bruge 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
Der er mange flere felter, der kan returneres af information_schema.columns
. Du kan bruge SELECT *
for at returnere dem alle, hvis du ønsker det.
Kommandolinjemetoden til at hente tabeloplysninger fungerer også, når du bruger et GUI-værktøj (de er trods alt kun SQL-sætninger). Du kan indtaste de samme SQL-sætninger for at hente de samme data, uanset om du bruger sql-cli, sqlcmd, SSMS, Azure Data Studio, DBeaver eller ethvert andet SQL Server-administrationsværktøj:
GO
Kommando
Du skal muligvis tilføje GO
til slutningen af scriptet (når du f.eks. bruger sqlcmd).
Flere linjer
Du kan opleve, at du får en fejl, hvis du prøver at sprede ovenstående scripts over flere linjer med et kommandolinjeværktøj.
Hvis dette er tilfældet, prøv at tilføje en omvendt skråstreg til slutningen af hver linje. Sådan:
USE Music; \ SELECT column_name, data_type, character_maximum_length, is_nullable \ FROM information_schema.columns;
Hvis du ikke kan lide tanken om at skulle tilføje skråstreg, er en anden mulighed at gemme scriptet med flere linjer i en .sql-fil og derefter køre det fra kommandoprompten.
Metoden til at køre et script fra kommandoprompten afhænger af det kommandolinjeværktøj, du bruger.
Sådan bruger du sqlcmd til at køre en fil, der er gemt på en Windows-maskine:
sqlcmd -S myServer\instanceName -i C:\myScript.sql
Og her er, hvordan du bruger sql-cli til at køre en fil, der er gemt på en Mac:
.run /myScript.sql
Det er klart, at den fulde sti og filnavne afhænger af dit filnavn og hvor du har gemt det.