Buscar este blog

miércoles, 12 de marzo de 2014

Tipos de datos por defecto en SQL Server

En ocasiones necesitamos que nuestras consultas devuelvan valores constantes. Por ejemplo, de manera muy sencilla, podemos tener una consulta como la siguiente:

Si necesitamos recuperar los valores devueltos por la consulta en un recordset de ADO.NET, por ejemplo, ¿qué tipo de datos debemos esperar de columnas de este tipo? La respuesta: depende.

Depende del tipo de constante que hayamos introducido. Si se trata de un número que no desborde los 4 bytes de capacidad de un entero (int), como en el caso del 1 de nuestra consulta anterior, éste será el tipo de datos de dicha constante.

Si escribimos la constante entre comillas simples, SQL lo tratará como un varchar del tamaño del literal que hayamos escrito. Por ejemplo:

Creará un campo varchar(1). Éste sería nvarchar(2) si hubiésemos escrito lo siguiente, indicando un literal Unicode mediante la N delante del literal:

Para un número con parte decimal, el tipo de datos será numeric; lo mismo que para un número de tamaño mayor que el máximo entero positivo. Si escribimos un símbolo de moneda, como €, SQL lo interpretará con el tipo de datos money. Y así, sucesivamente.

Para comprobar todos los tipos de datos que queramos, podemos ejecutar el siguiente script:

Y comprobar en sus resultados qué tipo de datos podemos esperar para cada tipo de constante que se nos ocurra:

Llama especialmente la atención el tratamiento que recibe el NULL de la columna 7: su tipo de datos por defecto también es int.

Éste es el comportamiento que cabe esperar de SQL Server. Sin embargo, lo recomendable sería controlar exactamente qué tipo de datos queremos que nos sea devuelto ejecutando los CAST pertinentes sobre cada una de las constantes. En el ejemplo anterior, lo lógico es que queramos tratar el literal '20140312' como una fecha, por lo que la consulta sobre ese valor debería realizarse así:

No hay comentarios:

Publicar un comentario