Lektion 1: Erstellen und Abfragen von Datenbankobjekten

Gilt für:SQL ServerAzure SQL-DatenbankAzure SQL Managed InstanceAnalytics Platform System (PDW)

Hinweis

Der Lernpfad Erste Schritte für Abfragen mit Transact-SQL bietet ausführlichere Inhalte sowie praktische Beispiele.

In dieser Lektion erfahren Sie, wie Sie eine Datenbank erstellen, eine Tabelle in der Datenbank erstellen und dann auf die Daten in der Tabelle zugreifen und diese ändern können. Da es sich bei dieser Lektion um eine Einführung in die Verwendung von Transact-SQL handelt, werden viele der für diese Anweisungen verfügbaren Optionen nicht verwendet oder beschrieben.

Transact-SQL-Anweisungen können wie folgt geschrieben und an die Datenbank-Engine übertragen werden:

  • Mithilfe von SQL Server Management Studio. In diesem Lernprogramm wird vorausgesetzt, dass Sie Management Studioverwenden. Sie können jedoch auch Management Studio Express verwenden, das als kostenloser Download im Microsoft Download Centerzur Verfügung steht.

  • Über das Hilfsprogramm sqlcmd.

  • Durch Herstellen der Verbindung über eine von Ihnen erstellte Anwendung.

Der Code wird in der Datenbank-Engine immer auf gleiche Weise und mit denselben Berechtigungen ausgeführt, unabhängig davon, wie Sie die Codeanweisungen übermitteln.

Damit Sie Transact-SQL-Anweisungen in Management Studio ausführen können, öffnen Sie Management Studio und stellen eine Verbindung mit einer Instanz von SQL Server-Datenbank-Engine her.

Voraussetzungen

Zur Durchführung dieses Tutorials benötigen Sie SQL Server Management Studio und Zugriff auf eine SQL Server-Instanz.

Wenn Sie keine SQL Server-Instanz haben, erstellen Sie eine. Wählen Sie dazu aus den folgenden Links Ihre Plattform aus. Wenn Sie die SQL-Authentifizierung wählen, verwenden Sie Ihre SQL Server-Anmeldeinformationen.

Erstellen einer Datenbank

Wie viele Transact-SQL-Anweisungen umfasst auch die CREATE DATABASE-Anweisung einen erforderlichen Parameter: den Namen der Datenbank. CREATE DATABASE umfasst zudem viele optionale Parameter wie z. B. den Speicherort auf dem Datenträger, an dem Sie die Datenbankdateien ablegen möchten. Wenn Sie CREATE DATABASE ohne optionale Parameter ausführen, werden von SQL Server Standardwerte für viele dieser Parameter verwendet.

  1. Geben Sie in einem Fenster des Abfrage-Editors den folgenden Code ein, aber führen Sie ihn nicht aus:

    CREATE DATABASE TestData
    GO
    
  2. Verwenden Sie den Zeiger, um die Wörter CREATE DATABASEauszuwählen, und drücken Sie dann F1. Der CREATE DATABASE-Artikel wird geöffnet. Sie können dieses Verfahren verwenden, um die vollständige Syntax für CREATE DATABASE und für die anderen in diesem Tutorial verwendeten Anweisungen zu finden.

  3. Drücken Sie im Abfrage-Editor F5 , um die Anweisung auszuführen und eine Datenbank mit Namen TestDatazu erstellen.

Wenn Sie eine Datenbank erstellen, wird von SQL Server eine Kopie der model -Datenbank erstellt und die Kopie in den Namen der Datenbank umbenannt. Dieser Vorgang dauert nur einige Sekunden, es sei denn, Sie geben eine große Anfangsgröße der Datenbank als optionalen Parameter an.

Hinweis

Das GO-Schlüsselwort trennt Anweisungen, wenn mehrere Anweisungen in einem einzelnen Batch gesendet werden. GO ist optional, wenn der Batch nur eine Anweisung enthält.

Erstellen einer Tabelle

Gilt für:SQL ServerAzure SQL DatabaseAzure Synapse AnalyticsAnalytics Platform System (PDW)

Zum Erstellen einer Tabelle müssen Sie einen Tabellennamen sowie die Namen und Datentypen jeder Spalte in der Tabelle angeben. Außerdem empfiehlt es sich, anzugeben, ob NULL-Werte in den einzelnen Spalten zulässig sind. Zum Erstellen der Tabelle müssen Sie über die Berechtigung CREATE TABLE verfügen sowie über die Berechtigung ALTER SCHEMA für das Schema, das die Tabelle enthalten wird. Die feste Datenbankrolle db_ddladmin umfasst die folgenden Berechtigungen.

Die meisten Tabellen verfügen über einen Primärschlüssel, der sich aus einer oder mehreren Spalten der Tabelle zusammensetzt. Ein Primärschlüssel ist immer eindeutig. Die Datenbank-Engine erzwingt die Einschränkung, dass ein Primärschlüsselwert in der Tabelle nicht wiederholt werden kann.

Eine Liste der Datentypen sowie Links zu Beschreibungen der einzelnen Datentypen finden Sie unter Datentypen (Transact-SQL).

Hinweis

Datenbank-Engine kann mit oder ohne Beachtung der Groß-/Kleinschreibung installiert werden. Wurde Datenbank-Engine so installiert, dass die Groß-/Kleinschreibung beachtet wird, müssen Objektnamen immer die gleiche Groß-/Kleinschreibung aufweisen. Beispielsweise unterscheidet sich eine Tabelle namens OrderData von einer Tabelle namens ORDERDATA. Wurde Datenbank-Engine so installiert, dass die Groß-/Kleinschreibung nicht beachtet wird, bezeichnen diese beiden Tabellennamen die gleiche Tabelle, und der Name kann nur einmal verwendet werden.

Ändern der Verbindung des Abfrage-Editors in die Datenbank TestData

Geben Sie in einem Abfrage-Editorfenster den folgenden Code ein, und führen Sie ihn aus, um die Verbindung in die TestData -Datenbank zu ändern.

USE TestData
GO

Erstellen der Tabelle

Geben Sie in einem Abfrage-Editorfenster den folgenden Code ein, und führen Sie ihn aus, um eine Tabelle namens Products zu erstellen. Die Spalten in der Tabelle heißen ProductID, ProductName, Priceund ProductDescription. Die ProductID -Spalte ist der Primärschlüssel der Tabelle. int, varchar(25), moneyund varchar(max) sind Datentypen. Nur die Spalten Price und ProductionDescription dürfen keine Daten enthalten, wenn eine Zeile eingefügt oder geändert wird. Diese Anweisung enthält ein optionales Element (dbo.), das als Schema bezeichnet wird. Das Schema ist das Datenbankobjekt, das die Tabelle besitzt. Wenn Sie Administrator sind, ist dbo das Standardschema. dbo steht für Datenbankbesitzer (database owner, dbo).

CREATE TABLE dbo.Products
    (ProductID int PRIMARY KEY NOT NULL,
    ProductName varchar(25) NOT NULL,
    Price money NULL,
    ProductDescription varchar(max) NULL)
GO

Einfügen und Aktualisieren von Daten in einer Tabelle

Nachdem Sie nun die Products-Tabelle erstellt haben, können Sie Daten mithilfe der INSERT-Anweisung in die Tabelle einfügen. Nach dem Einfügen der Daten ändern Sie den Inhalt einer Zeile mithilfe einer UPDATE-Anweisung. Mithilfe der WHERE-Klausel der UPDATE-Anweisung schränken Sie das Update auf eine einzelne Zeile ein. Durch die vier Anweisungen werden die folgenden Daten eingegeben.

ProductID ProductName Preis ProductDescription
1 Clamp 12.48 Workbench clamp
50 Screwdriver 3,17 Flat head
75 Tire Bar Tool for changing tires.
3000 3 mm Bracket 0,52

Die grundlegende Syntax lautet: INSERT, Tabellenname, Spaltenliste, VALUES und dann eine Liste der einzufügenden Werte. Die beiden Bindestriche vor einer Zeile geben an, dass es sich bei der Zeile um einen Kommentar handelt, der vom Compiler ignoriert wird. In diesem Fall wird im Kommentar eine zulässige Variante der Syntax beschrieben.

Einfügen von Daten in eine Tabelle

  1. Führen Sie die folgende Anweisung aus, um eine Zeile in die in der vorhergehenden Aufgabe erstellte Products -Tabelle einzufügen.

    -- Standard syntax
    INSERT dbo.Products (ProductID, ProductName, Price, ProductDescription)
        VALUES (1, 'Clamp', 12.48, 'Workbench clamp')
    GO
    

    Wenn der Einfügevorgang erfolgreich ist, fahren Sie mit dem nächsten Schritt fort.

    Wenn der Einfügevorgang fehlschlägt, kann das daran liegen, dass die Product-Tabelle bereits über eine Zeile verfügt, in der sich diese Produkt-ID befindet. Löschen Sie alle Zeilen in der Tabelle, und wiederholen Sie den vorherigen Schritt, um fortfahren zu können. Mit TRUNCATE TABLE werden alle Zeilen in der Tabelle gelöscht.

    Führen Sie den folgenden Befehl aus, um alle Zeilen in der Tabelle zu löschen:

    TRUNCATE TABLE TestData.dbo.Products;
    GO
    

    Nachdem Sie die Zeilen aus der Tabelle entfernt haben, führen Sie den INSERT-Befehl dieses Schritts noch mal aus.

  2. In der folgenden Anweisung sehen Sie, wie die Reihenfolge, in der die Parameter bereitgestellt werden, durch Wechseln der Position von ProductID und ProductName sowohl in der Liste der Felder (in Klammern) als auch in der Liste der Werte geändert werden kann.

    -- Changing the order of the columns
    INSERT dbo.Products (ProductName, ProductID, Price, ProductDescription)
        VALUES ('Screwdriver', 50, 3.17, 'Flat head')
    GO
    
  3. Die folgende Anweisung veranschaulicht, dass die Namen der Spalten optional sind, solange die Werte in der richtigen Reihenfolge aufgelistet werden. Diese Syntax ist üblich, wird aber nicht empfohlen, da sie das Verständnis des Codes durch Dritte erschweren könnte. Für die Spalte Price wird NULL angegeben, da der Preis für dieses Produkt noch nicht bekannt ist.

    -- Skipping the column list, but keeping the values in order
    INSERT dbo.Products
        VALUES (75, 'Tire Bar', NULL, 'Tool for changing tires.')
    GO
    
  4. Der Schemaname ist optional, solange Sie auf eine Tabelle im Standardschema zugreifen und diese ändern. Da die ProductDescription -Spalte NULL-Werte zulässt und kein Wert bereitgestellt wird, können Name und Wert der ProductDescription -Spalte vollständig aus der Anweisung gelöscht werden.

    -- Dropping the optional dbo and dropping the ProductDescription column
    INSERT Products (ProductID, ProductName, Price)
        VALUES (3000, '3 mm Bracket', 0.52)
    GO
    

Aktualisieren der Products-Tabelle

Geben Sie die folgende UPDATE -Anweisung zum Ändern von ProductName des zweiten Produkts von Screwdriverin Flat Head Screwdriverein, und führen Sie sie aus.

UPDATE dbo.Products
    SET ProductName = 'Flat Head Screwdriver'
    WHERE ProductID = 50
GO

Lesen von Daten aus einer Tabelle

Daten in einer Tabelle können mithilfe der SELECT-Anweisung gelesen werden. Die SELECT-Anweisung gehört zu den wichtigsten Transact-SQL-Anweisungen. Ihre Syntax zeichnet sich durch unzählige Variationen aus. In diesem Tutorial arbeiten Sie mit fünf einfachen Versionen.

Lesen der Daten in einer Tabelle

  1. Geben Sie die folgenden Anweisungen zum Lesen der Daten in der Products -Tabelle ein, und führen Sie sie aus.

    -- The basic syntax for reading data from a single table
    SELECT ProductID, ProductName, Price, ProductDescription
        FROM dbo.Products
    GO
    
  2. Sie können alle Spalten in der Tabelle mithilfe eines Sternchens (*) auswählen. Das Sternchen eignet sich für Ad-hoc-Abfragen. Sie sollten die Spaltenliste im dauerhaften Code bereitstellen, sodass die Anweisung die vorhergesagten Spalten zurückgibt, selbst wenn der Tabelle später eine neue Spalte hinzugefügt wird.

    -- Returns all columns in the table
    -- Does not use the optional schema, dbo
    SELECT * FROM Products
    GO
    
  3. Sie können Spalten auslassen, die nicht zurückgegeben werden sollen. Die Spalten werden in der Reihenfolge zurückgegeben, in der sie aufgelistet sind.

    -- Returns only two of the columns from the table
    SELECT ProductName, Price
        FROM dbo.Products
    GO
    
  4. Mithilfe einer WHERE -Klausel können Sie die an den Benutzer zurückgegebenen Zeilen beschränken.

    -- Returns only two of the records in the table
    SELECT ProductID, ProductName, Price, ProductDescription
        FROM dbo.Products
        WHERE ProductID < 60
    GO
    
  5. Sie können die Werte in den Spalten direkt nach ihrer Rückgabe bearbeiten. Im folgenden Beispiel wird eine mathematische Operation für die Price -Spalte ausgeführt. In dieser Art geänderte Spalten weisen keinen Namen auf, sofern Sie nicht mithilfe des Schlüsselworts AS einen Namen angeben.

    -- Returns ProductName and the Price including a 7% tax
    -- Provides the name CustomerPays for the calculated column
    SELECT ProductName, Price * 1.07 AS CustomerPays
        FROM dbo.Products
    GO
    

Nützliche Funktionen in einer SELECT-Anweisung

Weitere Informationen zu einigen Funktionen, die zum Bearbeiten von Daten in SELECT-Anweisungen verwendet werden können, finden Sie in den folgenden Artikeln:

Erstellen von Ansichten und gespeicherten Prozeduren

Bei einer Sicht handelt es sich um eine gespeicherte SELECT-Anweisung, und eine gespeicherte Prozedur setzt sich aus einer oder mehreren Transact-SQL-Anweisungen zusammen, die als Batch ausgeführt werden.

Sichten werden wie Tabellen abgefragt und akzeptieren keine Parameter. Gespeicherte Prozeduren sind komplexer als Sichten. Gespeicherte Prozeduren können sowohl Eingabe- als auch Ausgabeparameter aufweisen und Anweisungen enthalten, die den Ablauf des Codes steuern, wie z. B. IF- und WHILE-Anweisungen. Als eine der Grundregeln guter Programmierung gilt die Verwendung gespeicherter Prozeduren für alle Aktionen, die sich in der Datenbank wiederholen.

In diesem Beispiel erstellen Sie mithilfe von CREATE VIEW eine Sicht, die nur zwei der Spalten in der Products-Tabelle auswählt. Sie erstellen dann mithilfe von CREATE PROCEDURE eine gespeicherte Prozedur, die einen Parameter für den Preis akzeptiert und nur die Produkte zurückgibt, deren Preis unter dem angegebenen Parameterwert liegt.

Erstellen einer Ansicht

Führen Sie die folgende Anweisung aus, um eine Sicht zu erstellen, die eine SELECT-Anweisung ausführt und die Namen und Preise der Produkte an den Benutzer zurückgibt.

CREATE VIEW vw_Names
   AS
   SELECT ProductName, Price FROM Products;
GO

Testen der Sicht

Sichten werden genau wie Tabellen behandelt. Greifen Sie mithilfe einer SELECT -Anweisung auf eine Sicht zu.

SELECT * FROM vw_Names;
GO

Erstellen einer gespeicherten Prozedur

Die folgende Anweisung erstellt eine gespeicherte Prozedur namens pr_Names, die einen Eingabeparameter mit der Bezeichnung @VarPrice vom Datentyp moneyakzeptiert. Die gespeicherte Prozedur druckt die mit dem Eingabeparameter verkettete Products less than -Anweisung. Dieser Parameter wird vom money -Datentyp in den varchar(10) -Zeichendatentyp geändert. Dann führt die Prozedur eine SELECT -Anweisung für die Sicht aus und übergibt dabei den Eingabeparameter als Teil der WHERE -Klausel. Dadurch werden alle Produkte zurückgegeben, deren Preis unter dem Wert des Eingabeparameters liegt.

CREATE PROCEDURE pr_Names @VarPrice money
   AS
   BEGIN
      -- The print statement returns text to the user
      PRINT 'Products less than ' + CAST(@VarPrice AS varchar(10));
      -- A second statement starts here
      SELECT ProductName, Price FROM vw_Names
            WHERE Price < @VarPrice;
   END
GO

Testen der gespeicherten Prozedur.

Wenn Sie die gespeicherte Prozedur testen möchten, geben Sie die folgende Anweisung ein, und führen Sie sie aus. Die Prozedur sollte die Namen der beiden Produkte zurückgeben, die Sie in Lektion 1 mit einem Preis unter Products in die 10.00-Tabelle eingegeben haben.

EXECUTE pr_Names 10.00;
GO

Nächste Schritte

Im nächsten Artikel erfahren Sie, wie Sie Berechtigungen für Datenbankobjekte konfigurieren. Die Objekte, die in Lektion 1 erstellt wurden, werden in Lektion 2 ebenfalls verwendet.

Zum nächsten Artikel wechseln, um mehr zu erfahren: