Kategorie: "SQL Server"

SQL Server 2005 Books Online (May 2007)

Posted on Jun 11, 2007 von in SQL Server

Download an updated version of the documentation and tutorials for Microsoft SQL Server 2005. See the "Additional Information" section for an update on SQL Server Express Books Online.

http://www.microsoft.com/downloads/details.aspx?FamilyID=BE6A2C5D-00DF-4220-B133-29C1E0B6585F&mg_id=10124&displaylang=en

SQL Server rundet falsch oder doch nicht

Posted on Jun 7, 2007 von in SQL Server

Multipliziert man zwei Zahlen, die in Addition sowohl bei den Vorkomma- als auch bei den Nachkommastellen, den derzeit "maximalen" Datentyp DECIMAL(38,10) überschreitet, kann man unter Umstände eine Überraschung erleben. Das Ergebnis weicht ab von dem, was man vielleicht erwarten würde.

Allerdings nur oberflächlich betrachtet. Es gibt klar definierte Regeln, die man jedoch kennen muß.

Beispiel:

DECLARE @Multiplikant AS DECIMAL(38, 10)
DECLARE @Multiplikator AS DECIMAL(38, 10)
DECLARE @Result AS DECIMAL(38, 10)
SET @Multiplikant = .1235589123
SET @Multiplikator = 0.55456
SET @Result = @Multiplikant * @Multiplikator
SELECT @Multiplikant, @Multiplikator, @Result

Bevor wir das Ergebnis betrachten, erst einmal ein paar Erläuterungen zu diesem Skript. Wir wollen 2 Zahlen miteinander multiplizieren. Dafür haben wir 3 Variablen vom Typ DECIMAL(38,10) deklariert. Als Ergebnis (in Excel auf 10 Nachkommastellen gerundet) würde man 0,0685208304 erwarten. Läßt man nun das Skript laufen, erhält man folgendes Ergebnis:

                                                                                
------------- ------------- -------------
0.1235589123 0.5545600000 0.0685210000

(1 row(s) affected)

Was ist passiert?
Nun, die deklarierten Variablen Multiplikant und Multiplikator sind jeweils vom Typ DECIMAL(38,10). SQL Server "addiert" Vorkomma- und Nachkommastellen. Das Ergebnis der obigen Rechenoperation müßte also vom Typ DECIMAL(76,20) sein. Dies übersteigt jedoch sowohl die Result Variable als auch den maximal zulässigen DECIMAL Datentyp. Das Ergebnis ist nun, daß SQL Server den Nachkommastellenbereich rundet, um zu vermeiden, daß der Integralpart des Ergebnisses abgeschnitten wird. Dies heißt dann in aller Regel, daß nach 6 Nachkommastellen gerundet wird.

Um nun aus dem obigen Skript ein "korrektes" Ergebnis mit einer hinreichenden Anzahl von Nachkommastellen zu erhalten, muß man die verwendeten Datentypen modifizieren, unter Beachtung der SQL Server-spezifischen Regeln für Precision und Scale.

Bei Multiplikation wird Precision nach der Formel p1 + p2 + 1 errechnet. Scale wird s1 + s2 gerechnet.

Auf das Skript angewendet, könnte man dies folgendermaßen umformulieren:

DECLARE @Multiplikant AS DECIMAL(19, 10)
DECLARE @Multiplikator AS DECIMAL(19, 5)
DECLARE @Result AS DECIMAL(38, 10)
SET @Multiplikant = .1235589123
SET @Multiplikator = 0.55456
SET @Result = @Multiplikant * @Multiplikator
SELECT @Multiplikant, @Multiplikator, @Result

------------- -------- -------------
0.1235589123 0.55456 0.0685208304

(1 row(s) affected)

Wie man sieht, gleich das Ergebnis nun dem mit Excel errechneten. Vom tatsächlich "richtigen" Ergebnis von 0,068520830405088 wurde nur ein nicht signifikanter Anteil an Nachkommastellen abgeschnitten.

Fazit: Manchmal ist weniger mehr. Und gerade wenn man meint, durch Datentypen von vermeindlich hoher Genauigkeit ein hohes Maß an Exaktheit zu erreichen, sollte man sich über die Implikationen bewußt sein.

New SQL Best Practice Articles now available

Posted on Jun 6, 2007 von in SQL Server
http://blogs.msdn.com/sqlprogrammability/archive/2007/06/05/new-sql-best-practice-articles-now-available.aspx

Introduction to SQL, 4th edition

Posted on Mai 17, 2007 von in SQL Server

Ein "Einführungsbuch" zum Thema SQL, das mehr als 1.000 Seiten umfasst, sticht schon allein vom Umfang her aus der Masse von verfügbaren Einsteigerbüchern heraus. Aber auch inhaltlich ist dieses Buch herausragend.

Ganze Geschichte »

SQL Server 2005 Nachfolger offiziell angekündigt

Posted on Mai 11, 2007 von in SQL Server
Nun, im Moment zwar nicht viel mehr als die Marketingankündigung zu "Katmai", aber besser als nichts. :-) http://www.microsoft.com/presspass/press/2007/may07/05-09KatmaiPR.mspx http://www.microsoft.com/sql/prodinfo/futureversion/default.mspx

Murachs SQL Server 2005 for developers

Posted on Mär 29, 2007 von in SQL Server

Murach Bücher zeichnen sich durch eines aus: das "Paired Pages" Format. Dieses Format garantiert, daß auf einer Doppelseite der Inhalt derart dargestellt ist, daß ein Vor- oder Zurückblättern entfällt. Ich mag dieses Format. Auf gut 700 Seiten kann man nun in diesem typischen Format Murachs' Sicht eines Entwicklerbuches zum SQL Server 2005 lesen. So liest man zum Beispiel Ausführungen zum Datenbank-Design, CLR-Integration und SQL Programmierung (Anfänger und Fortgeschrittene). Dies war in Grunde auch schon eine komplette Inhaltsangabe.

Ganze Geschichte »

Date on Database: Writings 2000-2006

Posted on Feb 27, 2007 von in SQL Server

Bücher von C. J. Date sind keine leichte Kost. Manchmal muß man Passagen mehrmals lesen, um sie wirklich zu verstehen, manchmal sollte man nur einige wenige Sätze lesen, um dann anschließend das Gelesene auf sich einwirken zu lassen und darüber nachzudenken. Lohnend ist die Lektüre jedoch allemale. Seine Bücher sind von fundamentaler Bedeutung für den Bereich der relationalen Datenbanken und unbedingt empfehlenswert für jeden, der sich tiefer mit dieser Materie auseinandersetzen muss oder will.

Ganze Geschichte »

Pro SQL Server 2005 Replication

Posted on Feb 7, 2007 von in SQL Server

Bücher, die auschließlich Replikation mit SQL Server behandeln, sind eine Seltenheit, von daher ist es schon lobenswert, sich dieser Thematik überhaupt anzunehmen.

Ganze Geschichte »