Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Erstellen Sie eine berechnete Spalte in SQL Server mit T-SQL

Dieser Artikel demonstriert die Verwendung von T-SQL zum Erstellen einer berechneten Spalte in SQL Server.

Eine berechnete Spalte ist eine virtuelle Spalte, die einen Ausdruck verwendet, um ihren Wert zu berechnen. Der Ausdruck verwendet normalerweise Daten aus anderen Spalten. Eine berechnete Spalte wird nicht physisch in der Tabelle gespeichert, es sei denn, sie ist mit PERSISTED gekennzeichnet .

Beispiel 1 – Erstellen Sie eine Tabelle mit einer berechneten Spalte

Hier ist ein Beispiel für das Erstellen einer Tabelle mit einer berechneten Spalte, das Einfügen von Daten und das anschließende Auswählen des Inhalts der Tabelle.

CREATE TABLE Products
  (
    ProductID int IDENTITY (1,1) NOT NULL,
    ProductName varchar(255), 
    Quantity smallint,
    Price money,
    TotalValue AS Quantity * Price
  );

INSERT INTO Products (ProductName, Quantity, Price)
VALUES 
  ('Hammer', 5, 10),
  ('Corkscrew', 2, 7.50),
  ('Kettle', 3, 25.15);

SELECT *
FROM Products;

Ergebnis:

+-------------+---------------+------------+---------+--------------+
| ProductID   | ProductName   | Quantity   | Price   | TotalValue   |
|-------------+---------------+------------+---------+--------------|
| 1           | Hammer        | 5          | 10.0000 | 50.0000      |
| 2           | Corkscrew     | 2          | 7.5000  | 15.0000      |
| 3           | Kettle        | 3          | 25.1500 | 75.4500      |
+-------------+---------------+------------+---------+--------------+

In diesem Fall ist die letzte Spalte eine berechnete Spalte. Es multipliziert die Mengenspalte mit der Preisspalte. Dadurch können wir den Gesamtwert des derzeit auf Lager befindlichen Produkts ermitteln.

Beispiel 2 – Erstellen einer persistenten berechneten Spalte

Sie können eine persistente berechnete Spalte erstellen, indem Sie PERSISTED hinzufügen Streit. Dies führt dazu, dass der berechnete Wert physisch in der Tabelle gespeichert wird. Wenn er nicht beibehalten wird, wird der Wert jedes Mal berechnet, wenn Sie die berechnete Spalte lesen.

Hier ist das gleiche Codebeispiel wie im vorherigen, außer dass ich dieses Mal eine persistente berechnete Spalte erstelle:

CREATE TABLE Products
  (
    ProductID int IDENTITY (1,1) NOT NULL,
    ProductName varchar(255), 
    Quantity smallint,
    Price money,
    TotalValue AS Quantity * Price PERSISTED
  );

Der einzige Unterschied ist der PERSISTED Argument.

Beispiel 3 – Aktualisieren eines Werts

Jetzt, wenn ein Wert in der Quantity aktualisiert wird oder Price Spalten, wirkt sich dies auf den von der berechneten Spalte zurückgegebenen Gesamtwert aus. Dies geschieht unabhängig davon, ob die Spalte beibehalten wird oder nicht.

Wenn jemand beispielsweise einen Hammer kauft, wirkt sich dies auf den Gesamtwert aus, der von der berechneten Spalte zurückgegeben wird:

UPDATE Products
SET Quantity = 4
WHERE ProductId = 1;

SELECT *
FROM Products;

Ergebnis:

+-------------+---------------+------------+---------+--------------+
| ProductID   | ProductName   | Quantity   | Price   | TotalValue   |
|-------------+---------------+------------+---------+--------------|
| 1           | Hammer        | 4          | 10.0000 | 40.0000      |
| 2           | Corkscrew     | 2          | 7.5000  | 15.0000      |
| 3           | Kettle        | 3          | 25.1500 | 75.4500      |
+-------------+---------------+------------+---------+--------------+