Freigeben über


computed_column_definition (Transact-SQL)

Aktualisiert: 12. Dezember 2006

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

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 mit einem timestamp-Datentyp erstellte Spalten entfallen. Wenn column_name nicht für eine Spalte vom Typ timestamp angegeben ist, wird der Name timestamp verwendet.
  • computed_column_expression
    Ein Ausdruck, der den Wert einer berechneten Spalte definiert. Eine berechnete Spalte ist eine virtuelle Spalte, die nicht physikalisch in der Tabelle gespeichert ist, sondern anhand anderer Spalten in derselben Tabelle aus einem Ausdruck berechnet wird. Eine berechnete Spalte könnte z. B. folgende Definition besitzen: 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 integer 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.
      ms186241.note(de-de,SQL.90).gifHinweis:
      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 Microsoft SQL Server 2005-Datenbankmodul die berechneten Werte in der Tabelle speichert und die Werte aktualisiert, wenn andere Spalten aktualisiert werden, von denen die berechnete Spalte abhängt. 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) mithilfe eines eindeutigen Indexes erzwingt. Für jede Tabelle kann nur eine PRIMARY KEY-Einschränkung erstellt werden.
  • UNIQUE
    Eine Einschränkung, die Entitätsintegrität für eine angegebene Spalte (oder Spalten) mithilfe eines eindeutigen Indexes 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-Datenbankmodul die einzelnen Indexseiten füllen soll, die zum Speichern der Indexdaten verwendet werden. Vom Benutzer angegebene fillfactor-Werte können Zahlen zwischen 1 und 100 sein. Falls kein Wert angegeben wird, wird der Standardwert 0 verwendet.

    ms186241.note(de-de,SQL.90).gifWichtig:
    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. In SQL Server 2005 können andere Indexoptionen 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
      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 AdventureWorks-Datenbank verfügt die ProductVendor-Tabelle z. B. über eine referenzielle Beziehung zur Vendor-Tabelle. Der ProductVendor.VendorID-Fremdschlüssel verweist auf den Vendor.VendorID-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.VendorID festgelegt ist, sucht Datenbankmodul nach abhängigen Zeilen 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.

    Wenn jedoch NO ACTION angegeben ist, löst Datenbankmodul einen Fehler aus und führt für die Aktion zum Löschen der Vendor-Zeile ein Rollback aus, falls sich mindestens eine Zeile in der ProductVendor-Tabelle befindet, die darauf verweist.

    Geben Sie CASCADE nicht an, wenn die Tabelle in eine Mergepublikation 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 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 darauf verweist.
  • 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 Indexes 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 überhaupt nicht angegeben ist, wird der Index in derselben Dateigruppe wie die Tabelle erstellt. Wenn ON beim Hinzufügen eines gruppierten Indexes für eine PRIMARY KEY- oder UNIQUE-Einschränkung angegeben ist, wird die gesamte Tabelle beim Erstellen des gruppierten Indexes in die angegebene Dateigruppe verschoben.

    ms186241.note(de-de,SQL.90).gifHinweis:
    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 249 nicht gruppierte Indizes und 1 gruppierten Index übersteigt.

Siehe auch

Verweis

ALTER TABLE (Transact-SQL)

Andere Ressourcen

Steuern von Einschränkungen, Identitäten und Triggern mithilfe von NOT FOR REPLICATION

Hilfe und Informationen

Informationsquellen für SQL Server 2005

Änderungsverlauf

Version Verlauf

12. Dezember 2006

Geänderter Inhalt:
  • Die Position der Klauseln WITH FILLFACTOR und WITH index_option im Syntaxdiagramm wurde erläutert.

14. April 2006

Neuer Inhalt:
  • Die Einschränkung bezüglich der Verwendung von CASCADE zusammen mit logischen Datensätzen für die Mergereplikation wurde dokumentiert.