Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Erstellen Sie eine Tabelle in SQL Server 2017

Hier erstellen wir drei Tabellen in SQL Server und analysieren dann das Skript, das sie erstellt hat. Wir führen auch ein weiteres Skript aus, um zu überprüfen, ob die Tabelle erstellt wurde.

Zuvor haben wir eine Datenbank aus einem Skript erstellt. Die Datenbank ist jedoch eine leere Datenbank – sie enthält keine Tabellen oder Daten.

Jetzt werden wir einige Tabellen für unsere Datenbank erstellen.

Zunächst einmal zur Auffrischung:Hier ist, was wir bisher getan haben:

CREATE DATABASE Music;

Dadurch wurde eine leere Datenbank erstellt. Wenn Sie dies noch nicht getan haben, führen Sie dieses Skript aus.

Führen Sie nun das folgende Skript aus:

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

Dieses Skript fügt der Datenbank drei Tabellen hinzu. Die Tabellen heißen Artists , Genres und Albums .

Hier ist das Ergebnis in SQL Operations Studio/Azure Data Studio:

Jedes GUI-Tool zeigt die Tabellen auf ziemlich dieselbe Weise an. Jede Tabelle kann erweitert werden, um ihre Spalten sowie alle Indizes, Trigger, Schlüssel usw. anzuzeigen. Sie können auch die Spalten erweitern -Knoten, um die Liste der Spalten und ihrer Datentypen sowie alle angegebenen Einschränkungen anzuzeigen.

Erklärung zu CREATE TABLE Erklärung

Das gerade ausgeführte Skript besteht aus drei CREATE TABLE -Anweisungen — jede erstellt eine andere Tabelle. Das Skript fügt auch eine Fremdschlüsselbeschränkung hinzu, aber darauf gehen wir später ein.

Lassen Sie uns zunächst die erste CREATE TABLE analysieren Anweisung in unserem Skript:

USE Music;

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

Diese SQL-Anweisung erstellt eine Tabelle namens Artists mit drei Spalten, genannt ArtistId , ArtistName , und ActiveFrom . Die Definition jeder Spalte beginnt mit ihrem Namen, gefolgt von ihrem Datentyp und allen Einschränkungen, die auf diese Spalte angewendet werden sollen.

Hier ist eine detailliertere "zeilenweise" Beschreibung:

USE Music;
Dieser Teil ist eigentlich kein Teil von CREATE TABLE Erklärung. Es dient nur zum Umschalten auf Musik Datenbank. Auf dem Server können viele Datenbanken vorhanden sein, und wir möchten sicher sein, dass wir die Tabellen in der richtigen Datenbank erstellen. Sie brauchen diese Zeile nicht, wenn Sie bereits in der richtigen Datenbank arbeiten.
CREATE TABLE Artists (
Dies ist der Beginn von CREATE TABLE Erklärung. Darauf folgt der Tabellenname (in diesem Fall Artists ), gefolgt von der ersten der Klammern, die die Tabellendefinition umschließen.
ArtistId int IDENTITY(1,1) NOT NULL PRIMARY KEY,
Dann definieren wir die erste Spalte. In diesem Fall nennen wir es ArtistId , geben Sie seinen Datentyp als Ganzzahl an (int ), als Identitätsspalte festlegen (diese Spalte stellt die eindeutige ID für die Tabelle bereit, und der Wert wird mit jeder hinzugefügten Zeile erhöht), (1,1) bedeutet, dass der Wert bei 1 beginnt und um 1 erhöht wird, NOT NULL bedeutet, dass das Feld keine Nullwerte enthalten darf, und PRIMARY KEY legt diese Spalte als Primärschlüssel für die Tabelle fest. Ein Primärschlüssel ist eine Spalte, die als eindeutiges Bezeichnerfeld für die Tabelle konfiguriert wurde.
ArtistName nvarchar(255) NOT NULL,
Die nächste Spalte heißt ArtistName und sein Datentyp ist nvarchar(255) , was bedeutet, dass es Unicode-String-Daten variabler Länge mit einer maximalen Länge von 255 Zeichen akzeptiert. Wir setzen diese Spalte auch auf NOT NULL damit er keine Nulleinträge enthalten kann.
ActiveFrom date
Die letzte Spalte heißt ActiveFrom und wir stellen es so ein, dass es den Datentyp date akzeptiert
);
Wir verwenden dann ) um die Definition zu schließen, und ; um die Anweisung zu beenden (das Semikolon ist ein Anweisungsabschlusszeichen).
GO
Signalisiert das Ende eines Stapels von Transact-SQL-Anweisungen. Dies ist eigentlich keine Transact-SQL-Anweisung. Es ist ein Befehl, der von den Dienstprogrammen sqlcmd und osql und dem Code-Editor von SQL Server Management Studio erkannt wird, um das Ende eines Stapels von Transact-SQL-Anweisungen zu signalisieren.

So rufen Sie Tabelleninformationen ab, wenn Sie ein Befehlszeilentool verwenden

Wenn Sie ein Befehlszeilentool verwenden, haben Sie nicht den Luxus, Ihre Datenbanktabellen im Seitenbereich zu sehen, die darauf warten, mit einem einzigen Klick erweitert zu werden. Aber das bedeutet nicht, dass Sie keine Informationen über Ihre Tabellen oder andere Datenbankobjekte sehen können.

Wenn Sie ein Befehlszeilentool verwenden, können Sie die folgende Anweisung ausführen, um Informationen zu den Tabellen in der obigen Datenbank anzuzeigen:

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

Die fragliche Tabelle befindet sich in der Datenbank namens Music deshalb schalten wir zuerst darauf um.

Sie können es auch auf eine bestimmte Tabelle eingrenzen, indem Sie ein WHERE verwenden Klausel:

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

Es gibt viele weitere Felder, die von information_schema.columns zurückgegeben werden können . Sie können SELECT * verwenden um sie alle zurückzugeben, wenn Sie dies wünschen.

Die Befehlszeilenmethode zum Abrufen von Tabelleninformationen funktioniert auch mit einem GUI-Tool (schließlich sind es nur SQL-Anweisungen). Sie können dieselben SQL-Anweisungen eingeben, um dieselben Daten abzurufen, unabhängig davon, ob Sie sql-cli, sqlcmd, SSMS, Azure Data Studio, DBeaver oder ein anderes SQL Server-Verwaltungstool verwenden:

Das GO Befehl

Möglicherweise müssen Sie GO hinzufügen bis zum Ende des Skripts (wenn Sie beispielsweise sqlcmd verwenden).

Mehrere Zeilen

Möglicherweise erhalten Sie eine Fehlermeldung, wenn Sie versuchen, die obigen Skripts mit einem Befehlszeilentool auf mehrere Zeilen zu verteilen.

Versuchen Sie in diesem Fall, am Ende jeder Zeile einen umgekehrten Schrägstrich hinzuzufügen. So:

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

Wenn Ihnen die Idee nicht gefällt, Backslashes hinzufügen zu müssen, besteht eine andere Möglichkeit darin, das mehrzeilige Skript in einer .sql-Datei zu speichern und es dann über die Eingabeaufforderung auszuführen.

Die Methode zum Ausführen eines Skripts von der Eingabeaufforderung hängt von dem verwendeten Befehlszeilendienstprogramm ab.

So verwenden Sie sqlcmd, um eine auf einem Windows-Rechner gespeicherte Datei auszuführen:

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

Und so verwenden Sie sql-cli, um eine auf einem Mac gespeicherte Datei auszuführen:

.run /myScript.sql

Offensichtlich hängen der vollständige Pfad und die Dateinamen von Ihrem Dateinamen und dem Speicherort ab.