Freigeben über


Angeben von Standardwerten für Spalten

Gilt für: SQL Server 2016 (13.x) und höher Azure SQL-DatenbankAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

Sie können mit SQL Server Management Studio (SSMS) einen Standardwert angeben, der in die Tabellenspalte eingegeben wird. Sie können einen Standard festlegen, indem Sie den Objekt-Explorer verwenden oder Transact-SQL ausführen.

Wenn Sie der Spalte keinen Standardwert zuweisen und der Benutzer die Spalte leer lässt, passiert Folgendes:

  • Wenn Sie die Option so festlegen, dass NULL-Werte zugelassen sind, wird NULL in die Spalte eingefügt.

  • Wenn Sie die Option zum Zulassen von Nullwerten nicht festlegen, bleibt die Spalte leer, aber der Benutzer oder die Anwendung kann die Zeile erst einfügen, wenn sie einen Wert für die Spalte angeben.

Sie können eine Standardeinschränkung für verschiedene Aufgaben verwenden, um die Datenkonsistenz auf Datenbankebene sicherzustellen:

  • Legen Sie den Zeilenwert für eine „active“- oder „enable“-Spalte beim Einfügen auf 1 fest.
  • Legen Sie den Zeilenwert für ein Datumsfeld auf das aktuelle Datum fest.
  • Legen Sie den Zeilenwert für ein Feld auf eine deterministische Systemfunktion fest, z. B. DB_NAME().

Begrenzungen

Bevor Sie beginnen sollten Sie die folgenden Einschränkungen kennen:

  • Wenn die Eingabe im Feld Standardwert einen gebundenen Standardwert ersetzt (der ohne Klammern angezeigt wird), werden Sie aufgefordert, die Bindung des Standardwerts aufzuheben und ihn durch den neuen Standardwert zu ersetzen.

  • Um eine Textzeichenfolge einzugeben, schließen Sie den Wert in einfache Anführungszeichen (') ein. Verwenden Sie keine doppelten Anführungszeichen ("), da sie für Bezeichner in Anführungszeichen reserviert sind.

  • Um einen numerischen Standardwert einzugeben, geben Sie die Zahl ohne Anführungszeichen ein.

  • Wenn Sie ein Objekt bzw. eine Funktion eingeben, geben Sie den Namen des Objekts bzw. der Funktion ein, ohne ihn in Anführungszeichen einzuschließen.

  • In Azure Synapse Analytics können nur Konstanten für eine Standardeinschränkung verwendet werden. Ein Ausdruck kann bei einer Standardeinschränkung nicht verwendet werden.

Berechtigungen

Die in diesem Artikel beschriebenen Aktionen erfordern die ALTER-Berechtigung für die Tabelle.

Verwenden von SQL Server Management Studio zum Angeben eines Standardwerts

Sie können im Objekt-Explorer in SSMS einen Standardwert für eine Tabellenspalte angeben. Führen Sie dazu die folgenden Schritte aus:

  1. Stellen Sie eine Verbindung mit Ihrer SQL Server-Instanz über SSMS her.

  2. Klicken Sie im Objekt-Explorer mit der rechten Maustaste auf die Tabelle mit den Spalten, für die Sie die Skalierung ändern möchten, und klicken Sie auf Entwerfen.

  3. Wählen Sie die Spalte aus, für die Sie einen Standardwert angeben möchten.

  4. Geben Sie den neuen Standardwert auf der Registerkarte Spalteneigenschaften in der Eigenschaft Standardwert oder -bindung ein.

    Um einen numerischen Standardwert einzugeben, geben Sie die Zahl ein. Geben Sie bei einem Objekt oder einer Funktion den entsprechenden Namen ein. Geben Sie für einen alphanumerischen Standardwert den Wert in einfachen Anführungszeichen ein.

  5. Klicken Sie im Menü Datei auf <Tabellenname> speichern.

Angeben eines Standardwerts mit Transact-SQL

Es gibt verschiedene Möglichkeiten, wie Sie mit T-SQL einen Standardwert für eine Spalte angeben können. In jedem der folgenden Beispiele können Sie eine neue Transact-SQL-Abfrage mit diesen Schritten öffnen.

  1. Stellen Sie im Objekt-Explorer eine Verbindung mit einer Datenbank-Engine-Instanz her.

  2. Klicken Sie in der Standardleiste auf Neue Abfrage.

  3. Kopieren Sie das Beispiel in das Abfragefenster, und klicken Sie dann auf Ausführen.

Verwenden einer benannten Einschränkung

Beim Arbeiten mit Datenbankprojekten wird empfohlen, Einschränkungen mit Namen zu erstellen. Andernfalls erhält die Standardeinschränkung einen vom System generierten Namen, der sich in jeder SQL Server-Umgebung unterscheidet, in der Ihre Datenbankobjekte erstellt werden.

CREATE TABLE dbo.doc_exz (
    column_a INT,
    column_b INT CONSTRAINT DF_Doc_Exz_Column_B DEFAULT 50
);

Verwenden von ALTER TABLE

Sie können einer vorhandenen Tabelle mit ALTER TABLEeine benannte Einschränkung hinzufügen.

CREATE TABLE dbo.doc_exz (
    column_a INT,
    column_b INT
); -- Allows nulls.
GO

INSERT INTO dbo.doc_exz (column_a)
VALUES (7);
GO

ALTER TABLE dbo.doc_exz
ADD CONSTRAINT DF_Doc_Exz_Column_B DEFAULT 50 FOR column_b;
GO

Verwenden von CREATE TABLE

Sie können eine neue Tabelle mit Standardeinschränkungen mit CREATE TABLEerstellen.

CREATE TABLE dbo.doc_exz (
    column_a INT,
    column_b INT CONSTRAINT DF_Doc_Exz_Column_B DEFAULT 50
);

Legen Sie ein Erstellungsdatum fest

Im folgenden Beispiel wird die sysdatetimeoffset() Systemfunktion verwendet, um den Zeilenwert der dateinserted Spalte mit dem Datum zu füllen, an dem die Zeile erstellt wurde.

CREATE TABLE dbo.test (
    id INT identity(1, 1) NOT NULL CONSTRAINT PK_test PRIMARY KEY
    ,date_inserted DATETIMEOFFSET(2) NOT NULL CONSTRAINT DF_test_date_inserted DEFAULT(sysdatetimeoffset())
);

Eine Standardeinschränkung ändert sich nicht, wenn die Zeile aktualisiert wird. Wenn Sie einen Wert aktualisieren möchten, wenn die Zeile geändert wird, sollten Sie einen Trigger, eine temporale Tabelle, eine berechnete Spalteoder eine rowversion-Binärzeichenfolge verwenden. Erwägen Sie auch das Einfügen von Zeilen, indem Sie gespeicherte Prozeduren ausführen, anstatt Zeilen direkt einzufügen, wobei gespeicherte Prozeduren Geschäftslogik, Standardwerte und andere Regeln für die Datenkonsistenz erzwingen können.

Um Zeilen zu erkennen, die sich ändern, ziehen Sie Change Data Capture (CDC), die Änderungsnachverfolgung, eine temporale Tabelle oder eine Ledger-Tabelle in Betracht.