2009-07-15 9 views
14

I Größe in der Regel definieren, wenn die Parameter in meinem SP erklärt, wie:Was die Wirkung des Weglassens Größe in nvarchar Erklärung ist

@myParam nvarchar(size) 

oder wenn ich Gießen oder Umwandlung:

CAST(@myParam AS nvarchar(size)) 

Vor kurzem bin ich ve entfernt Größe aus meinen CAST-Funktionen wie:

CAST(@myParam AS nvarchar) 

und ich bin etwas besorgt, ob das mir wird kommen und beißen, wenn leas t erwartet :-(, da ich bei der Verwendung von rekursivem CTE und der Umwandlung von nvarchar ohne Angabe der Größe abgeschnittene nvarchar-Variablen bemerkte.

Irgendwelche Kommentare?

Antwort

18

Wenn Sie die Größe, wird standardmäßig 30 weglassen Siehe dazu:

http://msdn.microsoft.com/en-us/library/ms186939.aspx

dies in Aktion zu sehen, versuchen Sie die folgenden Anweisungen ausführen:

--outputs: 123456789.098765432 
select cast (123456789.098765432 as nvarchar) 

--throws "Arithmetic overflow error converting expression to data type nvarchar." 
select cast (123456789.0987654321 as nvarchar) 

--outputs: 123456789.0987654321 
select cast (123456789.0987654321 as nvarchar(31)) 

Pro @ krul Kommentar ; 30 ist die Standardlänge für CAST; aber die Standardlänge für eine Datendefinition oder Variablendeklaration 1.

NB: Es gibt auch eine STR Funktion, die numerische Felder in Strings konvertiert, für die die Standardlänge ist 10.

--outputs: 1234567890 
select str(1234567890) 

--outputs: ********** 
select str(12345678901) 

--outputs: 12345678901 
select str(12345678901,11) 
+0

danke, können Sie einen Link zur Verfügung stellen? – krul

+6

vielen Dank, die Dinge aufräumt: Wenn n in einer Datendefinition oder Variablendeklaration Anweisung nicht angegeben ist, ist die Standardlänge 1. Wenn n nicht mit der Funktion CAST angegeben ist, ist die Standardlänge 30. – krul

4

Es wird eingestellt die Größe auf die Standardgröße und den Rest abschneiden. Dies wird Sie wahrscheinlich beißen, wenn die Standardgröße nicht angemessen ist.

Event dann würde ich vorschlagen, dass Sie immer die Größe angeben, um klar zu machen, was Sie denken, die Größe wird, anstatt die nächste Person, die Code liest, zu SO zu kommen, um die Standardgröße von einem zu fragen nvarchar ist;).

Verwandte Themen