sql >> Database >  >> RDS >> Sqlserver

Maak een tabel in SQL Server 2017

Hier maken we drie tabellen in SQL Server en analyseren vervolgens het script waarmee ze zijn gemaakt. We voeren ook een ander script uit om te controleren of de tabel is gemaakt.

Voorheen maakten we een database vanuit een script. De database is echter een lege database — hij bevat geen tabellen of gegevens.

Nu gaan we enkele tabellen maken voor onze database.

Ten eerste, ter opfrissing, dit is wat we tot nu toe hebben gedaan:

CREATE DATABASE Music;

Dat zorgde voor een lege database. Als je dat nog niet hebt gedaan, voer dat script dan uit.

Voer nu het volgende script uit:

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

Dat script voegt drie tabellen toe aan de database. De tabellen heten Artists , Genres , en Albums .

Hier is het resultaat in SQL Operations Studio/Azure Data Studio:

Elke GUI-tool zal de tabellen op vrijwel dezelfde manier weergeven. Elke tabel kan worden uitgevouwen om de kolommen ervan weer te geven, evenals eventuele indexen, triggers, sleutels, enz. U kunt ook de Kolommen uitvouwen node om de lijst met kolommen en hun gegevenstypen weer te geven, evenals eventuele beperkingen die zijn opgegeven.

Uitleg van de CREATE TABLE Verklaring

Het script dat we zojuist hebben uitgevoerd, bestaat uit drie CREATE TABLE statements — elk creëert een andere tabel. Het script voegt ook een externe sleutelbeperking toe, maar daar zullen we later naar kijken.

Laten we voor nu de eerste CREATE TABLE . analyseren verklaring in ons script:

USE Music;

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

Deze SQL-instructie maakt een tabel met de naam Artists met drie kolommen, genaamd ArtistId , ArtistName , en ActiveFrom . De definitie van elke kolom begint met de naam, gevolgd door het gegevenstype en eventuele beperkingen die op die kolom moeten worden toegepast.

Hier is een meer gedetailleerde "regel voor regel" beschrijving:

USE Music;
Dit deel maakt eigenlijk geen deel uit van de CREATE TABLE uitspraak. Het is er alleen om over te schakelen naar de Muziek databank. Er kunnen veel databases op de server staan ​​en we willen er zeker van zijn dat we de tabellen in de juiste database maken. Je hebt deze regel niet nodig als je al in de juiste database werkt.
CREATE TABLE Artists (
Dit is het begin van de CREATE TABLE uitspraak. Het wordt gevolgd door de tabelnaam (in dit geval Artists ), gevolgd door de eerste van de haakjes die de tabeldefinitie omsluiten.
ArtistId int IDENTITY(1,1) NOT NULL PRIMARY KEY,
We definiëren dan de eerste kolom. In dit geval noemen we het ArtistId , specificeer het datatype als een geheel getal (int ), stel het in als een identiteitskolom (deze kolom geeft de unieke ID voor de tabel en de waarde wordt verhoogd met elke toegevoegde rij), de (1,1) betekent dat de waarde begint bij 1 en oploopt met 1, NOT NULL betekent dat het veld geen null-waarden kan bevatten, en PRIMARY KEY stelt deze kolom in als de primaire sleutel voor de tabel. Een primaire sleutel is een kolom die is geconfigureerd als het unieke identificatieveld voor de tabel.
ArtistName nvarchar(255) NOT NULL,
De volgende kolom heet ArtistName en het datatype is nvarchar(255) , wat betekent dat het Unicode-tekenreeksgegevens met variabele lengte accepteert, met een maximale lengte van 255 tekens. We stellen deze kolom ook in op NOT NULL zodat het geen null-items kan bevatten.
ActiveFrom date
De laatste kolom heet ActiveFrom en we hebben het ingesteld om een ​​gegevenstype van date te accepteren
);
We gebruiken dan ) om de definitie te sluiten, en ; om de verklaring te beëindigen (de puntkomma is een verklaring terminator).
GO
Signaleert het einde van een reeks Transact-SQL-instructies. Dit is niet echt een Transact-SQL-instructie. Het is een commando dat wordt herkend door de hulpprogramma's sqlcmd en osql en de code-editor van SQL Server Management Studio om het einde van een reeks Transact-SQL-instructies aan te geven.

Tabelinformatie ophalen bij gebruik van een opdrachtregelprogramma

Wanneer u een opdrachtregelprogramma gebruikt, heeft u niet de luxe om uw databasetabellen in het zijpaneel te zien zitten wachten om met een enkele klik te worden uitgebreid. Maar dat betekent niet dat u geen informatie over uw tabellen of andere database-objecten kunt bekijken.

Als u een opdrachtregelprogramma gebruikt, kunt u de volgende instructie uitvoeren om informatie over de tabellen in de bovenstaande database weer te geven:

USE Music; 
SELECT column_name, data_type, character_maximum_length, is_nullable 
FROM information_schema.columns;
Resultaat
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

De betreffende tabel staat in de database met de naam Music dus daarom schakelen we er eerst naar over.

Je kunt het ook verfijnen tot een specifieke tabel door een WHERE . te gebruiken clausule:

USE Music; 
SELECT column_name, data_type, character_maximum_length, is_nullable 
FROM information_schema.columns 
WHERE table_name = 'Artists';
Resultaat
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

Er zijn veel meer velden die kunnen worden geretourneerd door information_schema.columns . U kunt SELECT * . gebruiken om ze allemaal terug te sturen als je wilt.

De opdrachtregelmethode voor het ophalen van tabelinformatie werkt ook bij gebruik van een GUI-tool (het zijn tenslotte maar SQL-instructies). U kunt dezelfde SQL-instructies invoeren om dezelfde gegevens op te halen, of u nu sql-cli, sqlcmd, SSMS, Azure Data Studio, DBeaver of een ander SQL Server-beheerprogramma gebruikt:

De GO Commando

Mogelijk moet u GO . toevoegen naar het einde van het script (bij gebruik van bijvoorbeeld sqlcmd).

Meerdere regels

Het kan zijn dat u een foutmelding krijgt als u probeert de bovenstaande scripts over meerdere regels te verspreiden met een opdrachtregelprogramma.

Als dit het geval is, probeer dan een backslash toe te voegen aan het einde van elke regel. Zoals dit:

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

Als je het idee om backslashes toe te voegen niet leuk vindt, is een andere optie om het script met meerdere regels op te slaan in een .sql-bestand en het vervolgens uit te voeren vanaf de opdrachtprompt.

De methode voor het uitvoeren van een script vanaf de opdrachtprompt hangt af van het opdrachtregelprogramma dat u gebruikt.

Hier leest u hoe u sqlcmd gebruikt om een ​​bestand uit te voeren dat op een Windows-computer is opgeslagen:

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

En zo gebruikt u sql-cli om een ​​bestand uit te voeren dat op een Mac is opgeslagen:

.run /myScript.sql

Het is duidelijk dat het volledige pad en de bestandsnamen afhangen van je bestandsnaam en waar je het hebt opgeslagen.


  1. Wat zijn database-afhankelijkheden?

  2. ONLY_FULL_GROUP_BY uitschakelen

  3. NullPointerException op getReadableDatabase()

  4. Python from scratch:maak een dynamische website