Share via


computed_column_definition (Transact-SQL)

Gibt die Eigenschaften einer berechneten Spalte an, die einer Tabelle mithilfe von ALTER TABLE hinzugefügt wird.

Themenlink (Symbol)Transact-SQL-Syntaxkonventionen

Syntax

column_name AS computed_column_expression
[ PERSISTED [ NOT NULL ] ]
[ 
    [ CONSTRAINT constraint_name ]
    { PRIMARY KEY | UNIQUE }
        [ CLUSTERED | NONCLUSTERED ]
        [ WITH FILLFACTOR = fillfactor ]
        [ WITH ( <index_option> [, ...n ] ) ]
        [ ON { partition_scheme_name (partition_column_name ) | filegroup 
            | "default" } ]
    | [ FOREIGN KEY ] 
        REFERENCES ref_table [ ( ref_column ) ] 
        [ ON DELETE { NO ACTION | CASCADE } ] 
        [ ON UPDATE { NO ACTION } ] 
        [ NOT FOR REPLICATION ] 
    | CHECK [ NOT FOR REPLICATION ] ( logical_expression )
]

Argumente

  • column_name
    Der Name der Spalte, die geändert, hinzugefügt oder gelöscht werden soll. column_name kann zwischen 1 und 128 Zeichen umfassen. Bei neuen Spalten kann column_name für Spalten, die mit einem timestamp-Datentyp erstellt werden, ausgelassen werden. Der Name timestamp wird verwendet, wenn column_name nicht für eine Spalte vom Datentyp timestamp angegeben ist.

  • computed_column_expression
    Ein Ausdruck, der den Wert einer berechneten Spalte definiert. Eine berechnete Spalte ist eine virtuelle Spalte, die nicht physisch in der Tabelle gespeichert ist, sondern anhand anderer Spalten in derselben Tabelle aus einem Ausdruck berechnet wird. Eine berechnete Spalte kann z. B. folgende Definition haben: cost AS price * qty. Der Ausdruck kann der Name einer nicht berechneten Spalte, eine Konstante, eine Funktion, eine Variable oder eine beliebige durch einen oder mehrere Operatoren verbundene Kombination der genannten Möglichkeiten sein. Der Ausdruck kann weder eine Unterabfrage sein noch einen Aliasdatentyp einschließen.

    Berechnete Spalten können in Auswahllisten, WHERE-Klauseln, ORDER BY-Klauseln oder an anderen Stellen verwendet werden, an denen reguläre Ausdrücke verwendet werden. Dabei gelten folgende Ausnahmen:

    • Eine berechnete Spalte kann nicht als DEFAULT- oder FOREIGN KEY-Einschränkungsdefinition oder mit einer NOT NULL-Einschränkungsdefinition verwendet werden. Eine berechnete Spalte kann jedoch als Schlüsselspalte in einem Index oder als Teil einer PRIMARY KEY- oder UNIQUE-Einschränkung verwendet werden, wenn der Wert der berechneten Spalte durch einen deterministischen Ausdruck definiert ist und der Datentyp des Ergebnisses in Indexspalten zulässig ist.

      Falls die Tabelle z. B. die Spalten "a" und "b" vom Datentyp int aufweist, kann die berechnete Spalte "a + b" indiziert werden. Dagegen kann die berechnete Spalte "a + DATEPART(dd, GETDATE())" nicht indiziert werden, da sich der Wert in späteren Aufrufen ändern kann.

    • Eine berechnete Spalte kann nicht das Ziel einer INSERT- oder UPDATE-Anweisung sein.

      HinweisHinweis

      Da jede Zeile in einer Tabelle unterschiedliche Werte für Spalten besitzen kann, die in einer berechneten Spalte verwendet werden, weist die berechnete Spalte möglicherweise auch nicht für jede Zeile das gleiche Ergebnis auf.

  • PERSISTED
    Gibt an, dass das Database Engine (Datenbankmodul) die berechneten Werte physisch in der Tabelle speichert und die Werte aktualisiert, wenn Spalten, von denen die berechnete Spalte abhängt, aktualisiert werden. Durch das Markieren einer berechneten Spalte als PERSISTED kann ein Index für eine berechnete Spalte erstellt werden, die deterministisch, aber nicht präzise ist. Weitere Informationen finden Sie unter Erstellen von Indizes für berechnete Spalten. Berechnete Spalten, die als Partitionierungsspalten einer partitionierten Tabelle verwendet werden, müssen explizit als PERSISTED markiert werden. computed_column_expression muss deterministisch sein, wenn PERSISTED angegeben wird.

  • NULL | NOT NULL
    Gibt an, ob NULL-Werte in der Spalte zulässig sind. NULL ist genau genommen keine Einschränkung, kann jedoch auf die gleiche Weise verwendet werden wie NOT NULL. NOT NULL kann nur für berechnete Spalten angegeben werden, wenn auch PERSISTED angegeben ist.

  • CONSTRAINT
    Gibt den Beginn der Definition für eine PRIMARY KEY- oder UNIQUE-Einschränkung an.

  • constraint_name
    Die neue Einschränkung. Einschränkungsnamen müssen den Regeln für Bezeichner entsprechen, wobei der Name außerdem nicht mit einem Nummernzeichen (#) beginnen darf. Wenn constraint_name nicht angegeben ist, ordnet das System einen Namen für die Einschränkung zu.

  • PRIMARY KEY
    Eine Einschränkung, die Entitätsintegrität für eine angegebene Spalte (oder Spalten) mit einem eindeutigen Index erzwingt. Es kann nur eine PRIMARY KEY-Einschränkung für jede Tabelle erstellt werden.

  • UNIQUE
    Eine Einschränkung, die Entitätsintegrität für eine angegebene Spalte (oder Spalten) mithilfe eines eindeutigen Index bereitstellt.

  • CLUSTERED | NONCLUSTERED
    Gibt an, dass ein gruppierter oder nicht gruppierter Index für die PRIMARY KEY- oder UNIQUE-Einschränkung erstellt wird. Für PRIMARY KEY-Einschränkungen wird standardmäßig CLUSTERED verwendet. Für UNIQUE-Einschränkungen wird standardmäßig NONCLUSTERED verwendet.

    Wenn bereits eine gruppierte Einschränkung oder ein gruppierter Index für eine Tabelle vorhanden ist, kann CLUSTERED nicht angegeben werden. Wenn bereits eine gruppierte Einschränkung oder ein gruppierter Index für eine Tabelle vorhanden ist, wird für PRIMARY KEY-Einschränkungen standardmäßig NONCLUSTERED verwendet.

  • WITH FILLFACTOR = fillfactor
    Gibt an, wie weit SQL Server Database Engine (Datenbankmodul) die einzelnen Indexseiten füllen soll, die zum Speichern der Indexdaten verwendet werden. Vom Benutzer angegebene fillfactor-Werte können Zahlen von 1 bis 100 sein. Wenn kein Wert angegeben ist, lautet der Standardwert 0.

    Wichtiger HinweisWichtig

    Das Verwenden von WITH FILLFACTOR = fillfactor als einzige Indexoption, die für die PRIMARY KEY- oder UNIQUE-Einschränkungen gilt, wird hier aus Gründen der Abwärtskompatibilität weiterhin dokumentiert. In zukünftigen Versionen wird dies jedoch nicht mehr in dieser Weise dokumentiert werden. Andere Indexoptionen können in der index_option (Transact-SQL)-Klausel von ALTER TABLE angegeben werden.

  • FOREIGN KEY REFERENCES
    Eine Einschränkung, die referenzielle Integrität für die Daten in der Spalte oder den Spalten bereitstellt. FOREIGN KEY-Einschränkungen erfordern, dass jeder Wert in der Spalte in den entsprechenden Spalten, auf die verwiesen wird, in der Tabelle, auf die verwiesen wird, vorhanden ist. FOREIGN KEY-Einschränkungen können nur auf Spalten verweisen, die PRIMARY KEY- oder UNIQUE-Einschränkungen in der Tabelle sind, auf die verwiesen wird; oder auf Spalten, auf die in einer UNIQUE INDEX-Einschränkung in der Tabelle, auf die verwiesen wird, verwiesen wird. Fremdschlüssel für berechnete Spalten müssen auch als PERSISTED markiert werden.

  • ref_table
    Der Name der Tabelle, auf die die FOREIGN KEY-Einschränkung verweist.

  • ( ref_column )
    Eine Spalte aus der Tabelle, auf die die FOREIGN KEY-Einschränkung verweist.

  • ON DELETE { NO ACTION | CASCADE }
    Gibt an, welche Aktion für Zeilen in der Tabelle ausgeführt werden soll, wenn diese Zeilen eine referenzielle Beziehung aufweisen und die Zeile, auf die verwiesen wird, aus der übergeordneten Tabelle gelöscht wird. Der Standardwert ist NO ACTION.

    • NO ACTION
      Database Engine (Datenbankmodul) löst einen Fehler aus, und für die Aktion zum Löschen der Zeile in der übergeordneten Tabelle wird ein Rollback ausgeführt.

    • CASCADE
      Entsprechende Zeilen werden aus der verweisenden Tabelle entfernt, falls diese Zeile aus der übergeordneten Tabelle gelöscht wird.

    In der AdventureWorks2008R2-Datenbank verfügt die ProductVendor-Tabelle beispielsweise über eine referenzielle Beziehung zur Vendor-Tabelle. Der ProductVendor.BusinessEntityID-Fremdschlüssel verweist auf den Vendor.BusinessEntityID-Primärschlüssel.

    Wenn eine DELETE-Anweisung für eine Zeile in der Vendor-Tabelle ausgeführt wird und eine ON DELETE CASCADE-Aktion für ProductVendor.BusinessEntityID festgelegt ist, sucht das Database Engine (Datenbankmodul) nach mindestens einer abhängigen Zeile in der ProductVendor-Tabelle. Falls vorhanden, werden die abhängigen Zeilen in der ProductVendor-Tabelle gelöscht, ebenso wie die Zeile, auf die in der Vendor-Tabelle verwiesen wird.

    Ist hingegen NO ACTION angegeben, löst das Database Engine (Datenbankmodul) einen Fehler aus und führt ein Rollback für die Löschaktion der Vendor-Zeile aus, wenn in der ProductVendor-Tabelle mindestens eine Zeile vorhanden ist, die auf diese Zeile verweist.

    Geben Sie CASCADE nicht an, wenn die Tabelle in eine Mergeveröffentlichung einbezogen werden soll, bei der logische Datensätze verwendet werden. Weitere Informationen zu logischen Datensätzen finden Sie unter Gruppieren von Änderungen an verknüpften Zeilen mithilfe von logischen Datensätzen.

  • ON UPDATE { NO ACTION }
    Gibt an, welche Aktion für Zeilen in der Tabelle ausgeführt werden soll, wenn diese Zeilen eine referenzielle Beziehung aufweisen und die Zeile, auf die verwiesen wird, in der übergeordneten Tabelle aktualisiert wird. Wenn jedoch NO ACTION angegeben ist, löst das Database Engine (Datenbankmodul) einen Fehler aus und führt für die Aktion zum Aktualisieren der Vendor-Zeile ein Rollback aus, falls sich mindestens eine Zeile in der ProductVendor-Tabelle befindet, die auf diese Zeile verweist.

  • NOT FOR REPLICATION
    Kann für FOREIGN KEY- und CHECK-Einschränkungen festgelegt werden. Wenn diese Klausel für eine Einschränkung angegeben wird, wird die Einschränkung nicht erzwungen, wenn Replikations-Agents Einfüge-, Aktualisierungs- oder Löschvorgänge ausführen. Weitere Informationen finden Sie unter Steuern von Einschränkungen, Identitäten und Triggern mithilfe von NOT FOR REPLICATION.

  • CHECK
    Eine Einschränkung, die Domänenintegrität erzwingt, indem die möglichen Eingabewerte für eine oder mehrere Spalten beschränkt werden. CHECK-Einschränkungen für berechnete Spalten müssen auch als PERSISTED markiert werden.

  • logical_expression
    Ein logischer Ausdruck, der TRUE oder FALSE zurückgibt. Der Ausdruck kann keinen Verweis auf einen Aliasdatentyp enthalten.

  • ON { partition_scheme_name (partition_column_name) | filegroup| "default"}
    Gibt den Speicherort des Index an, der für die Einschränkung erstellt wird. Wenn partition_scheme_name angegeben wird, wird der Index partitioniert und die Partitionen werden den Dateigruppen zugeordnet, die durch partition_scheme_name angegeben sind. Wenn filegroup angegeben ist, wird der Index in der genannten Dateigruppe erstellt. Wenn "default" angegeben ist, oder wenn ON für alle festgelegt ist, wird der Index in derselben Dateigruppe erstellt wie die Tabelle. Wenn ON beim Hinzufügen eines gruppierten Index für eine PRIMARY KEY- oder UNIQUE-Einschränkung angegeben ist, wird die gesamte Tabelle beim Erstellen des gruppierten Index in die angegebene Dateigruppe verschoben.

    HinweisHinweis

    In diesem Zusammenhang ist DEFAULT kein Schlüsselwort. Es handelt sich dabei um einen Bezeichner für die Standarddateigruppe, der begrenzt sein muss, wie in ON "default" oder ON [default]. Wenn "default" angegeben ist, muss die Option QUOTED_IDENTIFIER für die aktuelle Sitzung auf ON festgelegt werden. Dies ist die Standardeinstellung. Weitere Informationen finden Sie unter SET QUOTED_IDENTIFIER (Transact-SQL).

Hinweise

Jede PRIMARY KEY- und UNIQUE-Einschränkung generiert einen Index. Die Anzahl von UNIQUE- und PRIMARY KEY-Einschränkungen darf nicht dazu führen, dass die Anzahl von Indizes für die Tabelle 999 nicht gruppierte Indizes und 1 gruppierten Index übersteigt.