Wenn man Tabellen erstellt, Variablen deklariert oder andere Sachen macht, bei denen man mit Datentypen in Berührung kommt, sollte man stets präzise den Untertypen angegeben, den man verwenden möchte. Hier bringt es nichts ein Lazycoder zu sein, der ein paar Tastaturanschläge sparen will.
Beispiel 1: Wenn man eine VARCHAR Variable der Länge 10 deklarieren möchte, gibt man an
DECLARE @MyVar VARCHAR(10)
und nicht
DECLARE @MyVar VARCHAR
SQL Server nimmt standardmässig eine Länge von 1 für Zeichenfolgen, sofern man nicht explizit die Länge vorgibt. SQL Server schneidet ferner die Daten ab, ohne eine Warnung auszugeben:
DECLARE @MyVar VARCHAR
SET @MyVar = 'AB'
SELECT @MyVar AS Only_one_character
Only_one_character
------------------
A
(1 row(s) affected)
Beispiel 2: Man möchte eine Variable vom Typ DECIMAL mit einer Precision von 8 und Scale von 2 deklarieren.
DECLARE MyVar DECIMAL(8,2)
Schreibt man hingegen
DECLARE @MyVar DECIMAL
unterstellt SQL Server hier den Datentyp DECIMAL(18,0).
DECLARE @MyVar DECIMAL
SET @MyVar = 123456789012345678
SELECT @MyVar
--------------------
123456789012345678
(1 row(s) affected)
Im Unterschied jedoch zu Zeichenfolgen, generiert SQL Server eine Warnung, falls der Wert zu groß ist, um in einen DECIMAL(18,0) zu passen
DECLARE @MyVar DECIMAL
SET @MyVar = 1234567890123456789
SELECT @MyVar
Server: Msg 8115, Level 16, State 8, Line 2
Arithmetic overflow error converting numeric to data type numeric.
--------------------
NULL
(1 row(s) affected)
*****