tipos tipo length ejemplo datos dato sql sql-server tsql

sql - tipo - ¿Cuál es el efecto de omitir el tamaño en la declaración nvarchar?



varchar max (2)

Normalmente defino el tamaño al declarar parámetros en mi SP, como:

@myParam nvarchar(size)

o al momento de lanzar o convertir:

CAST(@myParam AS nvarchar(size))

Recientemente he eliminado el tamaño de mis funciones CAST como:

CAST(@myParam AS nvarchar)

y estoy un poco preocupado si eso va a venir y morderme cuando menos se espera :-(, ya que noté un truncamiento en las variables nvarchar cuando utilizaba CTE recursivo y lanzaba nvarchar sin especificar el tamaño.

¿Algún comentario?


Establecerá el tamaño al tamaño predeterminado y truncará el resto. Esto seguramente vendrá a morderlo, a menos que el tamaño predeterminado sea apropiado.

Entonces, sugiero que siempre especifique el tamaño para aclarar cuál cree que será el tamaño, en lugar de que la siguiente persona que lea el código tenga que venir a SO para preguntar cuál es el tamaño predeterminado de nvarchar;) .


Si omite el tamaño, el valor predeterminado es 30. Vea esto:

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

Para ver esto en acción, intente ejecutar las siguientes declaraciones:

--outputs: 12345678901234567890.098765432 select cast (12345678901234567890.098765432 as nvarchar) --throws "Arithmetic overflow error converting expression to data type nvarchar." select cast (12345678901234567890.0987654321 as nvarchar) --outputs: 12345678901234567890.0987654321 select cast (12345678901234567890.0987654321 as nvarchar(31))

El comentario de Per @ Krul; 30 es la longitud predeterminada para CAST; sin embargo, la longitud predeterminada para una definición de datos o declaración de variable es 1.

NB: También hay una función STR que convierte los campos numéricos en cadenas, cuya longitud predeterminada es 10.

--outputs: 1234567890 select str(1234567890) --outputs: ********** select str(12345678901) --outputs: 12345678901 select str(12345678901,11)