Este es el blog de un entusiasta, experto en bases de datos (SQL Server 2012 Microsoft Certified Professional), que tratará de contaros el día a día de sus peripecias con Microsoft SQL Server. ¿Quieres aprender un poco más? ¿Tienes problemas con alguna consulta o de rendimiento con tu base de datos? Quizás pueda ayudarte. No dudes en dejar tus comentarios.
Buscar este blog
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:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
É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í:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
En esta entrada pretendemos explicar los diferentes resultados obtenidos por distintas construcciones de consultas que, aparentemente, deberían producir el mismo conjunto de resultados. Así, veremos las diferencias entre filtrar los resultados de una query en la unión (Join) mediante condiciones ON y mediante cláusulas WHERE.
Seguramente, muchos de vosotros habréis usado en innumerables ocasiones la función de T-SQL COUNT , que no hace sino devolver un número de registros: de una tabla, de un conjunto de resultados, etc... En una de sus aplicaciones, combinado con el DISTINCT -uno de los dos argumentos que admite- COUNT nos devuelve el número de valores únicos no nulos de la tabla o conjunto de resultados que estemos consultando. Pero ¡ojo! Cuidado con la sintaxis , o podemos obtener el valor equivocado sin darnos cuenta. No es lo mismo: SELECT COUNT (DISTINCT NombreCampo) FROM NombreTabla que: SELECT COUNT(*), DISTINCT NombreCampo FROM NombreTabla
En algunas ocasiones podemos vernos con la necesidad de conocer qué tablas de nuestra base de datos están ocupando más espacio en disco. Por ejemplo, si disponemos de SQL Server Express , cuyas bases de datos están limitadas a 4GB o 10GB, según la versión que estemos usando -4, hasta 2005; 10, a partir de 2008-, aparte de usar las opciones de comprimir la base de datos, poner el log en el modo simple de recuperación o ajustar las políticas de crecimiento automático de nuestros ficheros, podemos necesitar averiguar qué tablas crecen más para tomar las decisiones oportunas.
Comentarios
Publicar un comentario