Angeben von berechneten Spalten in einer TabelleSpecify Computed Columns in a Table

Gilt für: JaSQL Server JaAzure SQL-Datenbank NeinAzure Synapse Analytics (SQL DW) NeinParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

Eine berechnete Spalte ist eine virtuelle Spalte, die nicht physisch in der Tabelle gespeichert ist, es sei denn, die Spalte wurde (mit PERSISTED) als persistente Spalte markiert.A computed column is a virtual column that is not physically stored in the table, unless the column is marked PERSISTED. Der Ausdruck für eine berechnete Spalte kann aus Daten anderer Spalten einen Wert für die Spalte berechnen, der er zuwiesen ist.A computed column expression can use data from other columns to calculate a value for the column to which it belongs. Sie können mithilfe von SQL Server Management StudioSQL Server Management Studio oder Transact-SQLTransact-SQL einen Ausdruck für eine berechnete Spalte in SQL ServerSQL Server angeben.You can specify an expression for a computed column in SQL ServerSQL Server by using SQL Server Management StudioSQL Server Management Studio or Transact-SQLTransact-SQL.

In diesem ThemaIn This Topic

VorbereitungenBefore You Begin

EinschränkungenLimitations and Restrictions

  • Eine berechnete Spalte kann nicht als DEFAULT- oder FOREIGN KEY-Einschränkungsdefinition oder mit einer NOT NULL-Einschränkungsdefinition verwendet werden.A computed column cannot be used as a DEFAULT or FOREIGN KEY constraint definition or with a NOT NULL constraint definition. 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.However, if the computed column value is defined by a deterministic expression and the data type of the result is allowed in index columns, a computed column can be used as a key column in an index or as part of any PRIMARY KEY or UNIQUE constraint. 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.For example, if the table has integer columns a and b, the computed column a + b may be indexed, but computed column a + DATEPART(dd, GETDATE()) cannot be indexed, because the value might change in subsequent invocations.
  • Eine berechnete Spalte kann nicht das Ziel einer INSERT- oder UPDATE-Anweisung sein.A computed column cannot be the target of an INSERT or UPDATE statement.

SicherheitSecurity

BerechtigungenPermissions

Erfordert die ALTER-Berechtigung für die Tabelle.Requires ALTER permission on the table.

Verwenden von SQL Server Management StudioUsing SQL Server Management Studio

So fügen Sie eine neue berechnete Spalte hinzuTo add a new computed column

  1. Erweitern Sie in Objekt-Explorerdie Tabelle, der Sie die neue berechnete Spalte hinzufügen möchten.In Object Explorer, expand the table for which you want to add the new computed column. Klicken Sie mit der rechten Maustaste auf Spalten , und wählen Sie Neue Spalteaus.Right-click Columns and select New Column.

  2. Geben Sie den Spaltennamen ein, und akzeptieren Sie den Standarddatentyp (nchar(10)).Enter the column name and accept the default data type (nchar(10)). Datenbank-EngineDatabase Engine ermittelt den Datentyp der berechneten Spalte, indem die Regeln zur Rangfolge von Datentypen auf Ausdrücke angewendet werden, die in der Formel angegeben wurden.The Datenbank-EngineDatabase Engine determines the data type of the computed column by applying the rules of data type precedence to the expressions specified in the formula. Wenn die Formel beispielsweise auf eine Spalte vom Typ money und eine Spalte vom Typ intverweist, weist die berechnete Spalte den Typ money auf, da dieser Datentyp die höhere Rangfolge hat.For example, if the formula references a column of type money and a column of type int, the computed column will be of type money because that data type has the higher precedence. Weitere Informationen finden Sie unter Rangfolge der Datentypen (Transact-SQL).For more information, see Data Type Precedence (Transact-SQL).

  3. Erweitern Sie auf der Registerkarte Spalteneigenschaften die BerechneteSpalteSpezifikation -Eigenschaft.In the Column Properties tab, expand the Computed Column Specification property.

  4. Geben Sie für die untergeordnete Eigenschaft (Formel) in der Datenblattzelle auf der rechten Seite den Ausdruck für diese Spalte ein.In the (Formula) child property, enter the expression for this column in the grid cell to the right. In einer SalesTotal -Spalte kann die eingegebene Formel z. B. SubTotal+TaxAmt+Freightlauten, wodurch für jede Tabellenzeile der Wert in diesen Spalten hinzugefügt wird.For example, in a SalesTotal column, the formula you enter might be SubTotal+TaxAmt+Freight, which adds the value in these columns for each row in the table.

    Wichtig

    Wenn in einer Formel zwei Ausdrücke verschiedener Datentypen kombiniert sind, geben die Rangfolgeregeln für Datentypen an, dass der Datentyp mit der niedrigeren Rangfolge in den Datentyp mit der höheren Rangfolge konvertiert wird.When a formula combines two expressions of different data types, the rules for data type precedence specify that the data type with the lower precedence is converted to the data type with the higher precedence. Wenn es sich bei der Konvertierung nicht um eine unterstützte implizite Konvertierung handelt, wird der Fehler "Error validating the formula for column column_name." zurückgegeben.If the conversion is not a supported implicit conversion, the error "Error validating the formula for column column_name." is returned. Verwenden Sie die CAST-Funktion oder CONVERT-Funktion, um den Datentypkonflikt aufzulösen.Use the CAST or CONVERT function to resolve the data type conflict. Wenn beispielsweise eine Spalte vom Typ nvarchar mit einer Spalte vom Typ intkombiniert wird, muss der ganzzahlige Typ in nvarchar konvertiert werden, wie in der folgenden Formel ('Prod'+CONVERT(nvarchar(23),ProductID))dargestellt.For example, if a column of type nvarchar is combined with a column of type int, the integer type must be converted to nvarchar as shown in this formula ('Prod'+CONVERT(nvarchar(23),ProductID)). Weitere Informationen finden Sie unter CAST und CONVERT (Transact-SQL).For more information, see CAST and CONVERT (Transact-SQL).

  5. Geben Sie an, ob die Daten persistent gespeichert werden sollen, indem Sie im Dropdownfeld für die untergeordnete Eigenschaft IsPersisted die Option Ja oder Nein wählen.Indicate whether the data is persisted by choosing Yes or No from the drop-down for the Is Persisted child property.

  6. Klicken Sie im Menü Datei auf Speichern > Tabellenname.On the File menu, click Save table name.

So fügen Sie einer vorhandenen Spalte die Definition einer berechneten Spalte hinzuTo add a computed column definition to an existing column

  1. Klicken Sie im Objekt-Explorer mit der rechten Maustaste auf die Tabelle mit der Spalte, für die Sie den Ordner Spalten ändern und erweitern möchten.In Object Explorer, right-click the table with the column for which you want to change and expand the Columns folder.
  2. Klicken Sie mit der rechten Maustaste auf die Spalte, für die Sie die Formel einer berechneten Spalte angeben möchten, und klicken Sie auf Löschen.Right-click the column for which you want to specify a computed column formula and click Delete. Klicken Sie auf OK.Click OK.
  3. Fügen Sie eine neue Spalte hinzu, und geben Sie die Formel der berechneten Spalte an, indem Sie die vorangehenden Schritte ausführen, um eine neue berechnete Spalte hinzuzufügen.Add a new column and specify the computed column formula by following the previous procedure to add a new computed column.

Verwenden von Transact-SQLUsing Transact-SQL

So fügen Sie eine berechnete Spalte beim Erstellen einer Tabelle hinzuTo add a computed column when creating a table

Im folgenden Beispiel wird eine Tabelle mit einer berechneten Spalte erstellt, die den Wert in der Spalte QtyAvailable mit dem Wert in der Spalte UnitPrice multipliziert.The following example creates a table with a computed column that multiplies the value in the QtyAvailable column times the value in the UnitPrice column.

CREATE TABLE dbo.Products
   (
      ProductID int IDENTITY (1,1) NOT NULL
      , QtyAvailable smallint
      , UnitPrice money
      , InventoryValue AS QtyAvailable * UnitPrice
    )
;
-- Insert values into the table.
INSERT INTO dbo.Products (QtyAvailable, UnitPrice)
   VALUES (25, 2.00), (10, 1.5)
;
-- Display the rows in the table.
SELECT ProductID, QtyAvailable, UnitPrice, InventoryValue
FROM dbo.Products
;

So fügen Sie einer vorhandenen Tabelle eine neue berechnete Spalte hinzuTo add a new computed column to an existing table

Im folgenden Beispiel wird der im vorangehenden Beispiel erstellten Tabelle eine neue Spalte hinzugefügt.The following example adds a new column to the table created in the previous example.

ALTER TABLE dbo.Products ADD RetailValue AS (QtyAvailable * UnitPrice * 1.5)
;

Fügen Sie optional das PERSISTED-Argument hinzu, um die berechneten Werte physisch in der Tabelle zu speichern:Optionally, add the PERSISTED argument to physically store the computed values in the table:

ALTER TABLE dbo.Products ADD RetailValue AS (QtyAvailable * UnitPrice * 1.5) PERSISTED
;

So ändern Sie eine vorhandene Spalte in eine berechnete SpalteTo change an existing column to a computed column

Im folgenden Beispiel wird die im vorangehenden Beispiel hinzugefügte Spalte geändert.The following example modifies the column added in the previous example.

ALTER TABLE dbo.Products DROP COLUMN RetailValue
;
GO
ALTER TABLE dbo.Products ADD RetailValue AS (QtyAvailable * UnitPrice * 1.5)
;

Weitere Informationen finden Sie unter ALTER TABLE (Transact-SQL).For more information, see ALTER TABLE (Transact-SQL).