In SQL Server eine berechnete Spalte ist eine virtuelle Spalte, die einen Ausdruck verwendet, um ihren Wert zu berechnen.
Eine berechnete Spalte verwendet in der Regel Daten aus anderen Spalten in ihrer Berechnung. Wenn Daten in einer dieser Spalten aktualisiert werden, spiegelt die berechnete Spalte die Aktualisierung automatisch in ihrer Berechnung wider.
Beispiel einer berechneten Spalte
In diesem Beispiel der FullName
Spalte ist eine berechnete Spalte. Es verkettet die Werte aus FirstName
und LastName
Spalten, um den vollständigen Namen zu berechnen.
Wenn Sie ohne die berechnete Spalte den vollständigen Namen auswählen möchten, müssen Sie etwa so vorgehen:
SELECT FirstName + ' ' + LastName AS FullNameFROM Person;
Oder Sie könnten den CONCAT()
verwenden Funktion wie folgt:
SELECT CONCAT(FirstName, ' ', LastName) AS FullNameFROM Person;
Jedes Mal, wenn Sie einen vollständigen Namen aus der Tabelle auswählen möchten, müssen Sie die Verkettung in Ihre Abfrage einbeziehen.
Aber indem Sie eine berechnete Spalte wie die obige verwenden, könnten Sie Folgendes tun:
SELECT FullNameFROM Person;
Vorteile berechneter Spalten
Berechnete Spalten können beim Schreiben von Abfragen Zeit sparen, Fehler reduzieren und sogar die Leistung verbessern.
Berechnete Spalten können praktisch sein, wenn Sie immer wieder dieselbe Abfrage ausführen, insbesondere wenn diese Abfrage auf Geschäftsregeln basiert, die sich selten ändern.
Die berechnete Spalte im vorherigen Beispiel könnte uns in Zukunft viel Zeit sparen, da wir den Vor- und Nachnamen nicht jedes Mal verketten müssen, wenn wir den vollständigen Namen einer Person auswählen möchten.
Beispiele für Anwendungsfälle
Beispiele dafür, wo eine berechnete Spalte nützlich sein könnte, sind:
- Berechnung des Alters einer Person anhand ihres Geburtsdatums in einer anderen Spalte
- Vorname und Nachname verketten, basierend darauf, dass der Vorname in einer Spalte und der Nachname in einer anderen steht
- Berechnung des Lagerwerts eines Produkts basierend auf der Anzahl der auf Lager befindlichen Produkte in einer Spalte und dem Preis in einer anderen
- Berechnen Sie den BMI (Body Mass Index) einer Person basierend auf ihrer Größe und ihrem Gewicht in einer anderen Spalte
- Erstellen einer „Rang“-Spalte, die die Zeilen basierend auf Werten in anderen Spalten ordnet
- Berechnung der Rennzeiten von Marathonläufern basierend auf ihrer Startzeit und Endzeit in anderen Spalten
Persistenz berechneter Spalten
Eine berechnete Spalte wird nicht physisch in der Tabelle gespeichert, es sei denn, sie ist mit PERSISTED
gekennzeichnet .
Wenn es nicht ist eine persistente berechnete Spalte, wird die Berechnung jedes Mal durchgeführt, wenn auf die Tabelle zugegriffen wird.
Wenn es ist Bei einer persistenten berechneten Spalte wird der berechnete Wert physisch in der Tabelle gespeichert. Das heißt, es muss seinen Wert nicht jedes Mal berechnen, wenn Sie eine Abfrage ausführen. Wenn Daten in einer der Spalten aktualisiert werden, für die sie ihren Wert ableiten, wird der Wert der berechneten Spalte aktualisiert und in der Tabelle gespeichert. Dies kann die Leistung verbessern.
Beachten Sie, dass eine berechnete Spalte nur beibehalten werden kann, wenn sie deterministisch ist. Wenn es nicht deterministisch ist, erhalten Sie eine Fehlermeldung, wenn Sie versuchen, es beizubehalten.
Ein nicht-deterministischer Spalte ist eine, die selbst bei derselben Eingabe unterschiedliche Werte zurückgibt. Wenn Sie beispielsweise das aktuelle Datum in Ihrer Berechnung verwenden, ist der Wert jeden Tag anders und wird als nicht deterministisch betrachtet.
Wenn Sie einfach den Vornamen und den Nachnamen verketten, wäre das deterministisch, und Sie könnten eine solche Spalte beibehalten.
Erstellen einer berechneten Spalte
Sie können berechnete Spalten über die SSMS-GUI oder mit Transact-SQL erstellen.
In SSMS
In SSMS, im Table Designer , erstellen Sie die Spalte, die Sie als berechnete Spalte verwenden möchten (oder wählen Sie sie einfach aus, wenn sie bereits vorhanden ist), und dann unter den Spalteneigenschaften Geben Sie auf der Registerkarte Berechnete Spaltenspezifikation Ihre Formel ein Eigenschaftsfeld.
Machen Sie sich keine Gedanken darüber, der berechneten Spalte einen Datentyp zuzuweisen – SQL Server weist ihr einen Datentyp zu, der auf Ihrer Formel basiert.
Sie können auch Ja auswählen für wird beibehalten wenn Sie wünschen.
Mit T-SQL
Ein Beispiel für das Erstellen einer berechneten Spalte mit Transact-SQL finden Sie unter Erstellen einer berechneten Spalte in SQL Server mit T-SQL.