Berechnete Spalten

In diesem kleinen Blog-Eintrag geht es um berechnete Spalten um einen Teil der Business Logik innerhalb des Tabellen-Designs zu verlagern. Typischer Fall ist die Berechnung von kumulierten Netto und Brutto Werten innerhalb eines Bestellwesens.

Ausgangslage ist eine Bestelltabelle in der bestellte Artikel mit einer Menge und einem zugehörigen Preis gespeichert werden. Um entsprechend den Gesamtpreis zu ermitteln, benötigt man i.d.R. eine Funktion, Abfrage oder Prozedur. Ziel ist hier das Ergebnis direkt innerhalb der Tabelle zu speichern. Zusätzlich soll auch gleich die Mehrwertsteuer und der Brutto Wert abgespeichert werden.

Zuerst, um nicht bei einer Mehrwertsteuer Änderung das Tabellen Design anzupassen, benötigen wir eine Funktion die uns die Mehrwertsteuer zurückgibt:
CREATE FUNCTION dbo.HoleMehrwertsteuer ()
RETURNS float
BEGIN
RETURN 19.0
END
GO
Diese Funktion liefert die Mehrwertssteuer zurück.

Nun wird die Tabelle erstellt mit den Berechneten Spalten:
CREATE TABLE dbo.Bestellungen (
uid uniqueidentifier default newid() not null primary key,
artikelname varchar(255) not null,
artikelpreis money not null,
artikelmenge float not null,
nettopreis AS (artikelpreis * artikelmenge),
bruttopreis AS ((artikelpreis * artikelmenge) +
((artikelpreis * artikelmenge) *  (dbo.HoleMehrwertsteuer() / 100 )))
,
mehrwertsteuer AS (artikelpreis * artikelmenge * (dbo.HoleMehrwertsteuer() / 100 ))
);
GO
Erläuterung:

  • nettopreis: Berechnet den Preis anhand der Menge
  • bruttopreis: Berechnet den Preis anhand der Menge und addiert die MwSt hinzu
  • mehrwertsteuer: Gibt die enthaltene Mehrwertsteuer aus

Ein paar Daten:
INSERT INTO dbo.Bestellungen (artikelname, artikelpreis, artikelmenge)
VALUES
('Hemd', 30.00, 1),
('Jacke', 100.00, 1),
('Hose', 70.00, 2);
GO

Ergebnis:

In wie weit sich das Beispiel in der Praxis nutzen lässt, muss man für sich selber entscheiden. Grundsätzlich sollten Berechnete Spalten nicht ausßer Acht gelassen werden, denn dadurch kann man sich doch eine Menge an kleinen „lästigen“ Funktionen und Abfragen sparen kann, insbesondere wenn diese sehr Häufig wiederverwendet werden müssen.

Download:

Schreibe einen Kommentar