SQL Practice Blog – SQL Server, BizTalk und .NET Erfahrungen

SQL Server 2008: Computed Columns

leave a comment »

Ich habe heute mal wieder etwas neues im SQL Server entdeckt. Mit dem SQL Server 2005 wurden die computed columns (Berechnete Spalten) eingeführt. Diese Spalten können mit Hilfe einer Expression zur Laufzeit erzeugt zu werden. Es ist jedoch auch möglich diese Spalten permanent in der Datenbank zu speichern.

Wie erstellt man eine Computed Column?

Dies kann über den Designer oder über ein T-SQL Script geschehen. Ich möchte hier als Beispiel ein T-SQL Script zeigen:

create_table

Der markierte Bereich ist die Computed Column. Diese Computed Column wird nicht in der Datenbank gespeichert, sondern wird bei jeder Abfrage neu berechnet und im Speicher gehalten.

Wie erkenne ich eine Computed Column im ObjectExplorer?

objectexplorer

Eine Computed Column wird mit einem kleinen Taschenrechner über dem Tabellen Symbol dargestellt. Außerdem ist an der ersten Stelle das Wort Computed zu erkennen, darauf folgt der Rückgabetyp float und der Hinweis das es sich um eine NOT NULL Spalte handelt.

Hierbei ist anzumerken, das es sich nur um eine NOT NULL Spalte handelt, da sowohl die Spalte Qty wie auch die Spalte UnitPrice mit NOT  NULL deklariert wurde. Würde eine der beiden Spalten mit NULL deklariert werden, so wäre die Computed Column ebenfalls NULL.

Kann ich eine Computed Column auch persistieren?

persisted_script

Ja, auch das ist möglich. Hierzu muss man das T-SQL Script nur etwas anpassen und bei der Computed Column das Wort PERSISTED anhängen.

Jetzt wird die Spalte TotalPrice, welche eine Computed Column ist in der Datenbank gespeichert und bei jeder Änderung der Werte in den Feldern Qty oder UnitPrice aktualisiert.

Was gibt es sonst noch zu beachten?

Man kann auf eine Computed Column keine INSERT oder UPDATE Befehle anwenden, da die Werte dieser Spalte aus anderen Spalten berechnet werden. Sollten man berechnete Spalten als Partitionierungsspalten in einer partitionierten Tabelle einsetzen, so muss die Spalte immer persistiert werden. Das gleich gilt auch für den Fall, das man eine Computed Column als FOREIGN KEY Spalte nutzen möchte.

Man kann Computed Columns ebenfalls indizieren, jedoch müssen sie dazu persistiert werden. Sollten sich die berechneten Werte jedoch häufig ändern, so ist eine Indizierung nicht zu empfehlen.

Written by Robert Meyer

Januar 18, 2010 um 22:40

Veröffentlicht in SQL Server

Tagged with , , ,

Schreibe einen Kommentar

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s

%d Bloggern gefällt das: