Buscar este blog

lunes, 9 de noviembre de 2015

UNION vs UNION ALL: Entiende las diferencias

SQL Server ofrece el operador UNION para, según la MSDN, "combinar los resultados de dos o más consultas en un solo conjunto de resultados que incluye todas las filas que pertenecen a las consultas de la unión."

Para que el motor de base de datos pueda combinar el resultado de distintas consultas, éstas deben respetar el número y orden de las columnas implicadas. Asimismo, las columnas equivalentes en posición deben serlo también compatibles en tipos de datos.

El operador UNION presenta un modificador o argumento: ALL. Éste se escribe a continuación de UNION, así: UNION ALL. Cuando se especifica, SQL Server devuelve todas las filas de todas las consultas combinadas, incluyendo posibles duplicados.

Ahí radica justamente la diferencia entre UNION y UNION ALL: El operador de unión elimina las filas duplicadas cuando combina los resultados de las consultas implicadas. Sin embargo, con el argumento ALL, los duplicados se mantienen.


¿Cuándo uso UNION y cuándo UNION ALL?

El primer criterio de selección está claro: si no nos importa que haya registro repetidos o los necesitamos, entonces debemos usar UNION ALL. Si queremos asegurarnos de que no haya registros repetidos, usaremos UNION.


¿Y qué pasa si estoy seguro de que no hay registros repetidos?

En ese caso, por normal general, será mucho más eficiente usar UNION ALL, ya que le ahorramos a SQL Server la necesidad de comprobar y descartar posibles duplicados. Así que, salvo excepciones, salvo que explícitamente queramos eliminar duplicados, será más eficiente para SQL Server el uso de UNION ALL.

miércoles, 28 de enero de 2015

Cómo averiguar el propietario (Owner) de una base de datos en SQL Server

En ocasiones necesitamos conocer quién es el propietario de una base de datos. Normalmente podemos acceder a esta información a través del SQL Server Management Studio, consultando las propiedades de la base de datos.

Para ello, buscamos la base de datos que queramos consultar en el árbol de bases de datos del Object Explorer y hacemos clic derecho sobre ella. A continuación, elegimos la última opción del menú contextual que nos aparece: Propiedades. Veremos esta ventana:

Propiedades de una base de datos, que incluyen el propietario (en amarillo)
Propiedades de una base de datos, que incluyen el propietario (en amarillo)

Sin embargo, en ocasiones no tenemos acceso a esta ventana de propiedades o, simplemente, queremos consultar el propietario de todas las bases de datos de un servidor. Para ello disponemos del siguiente script T-SQL, que nos proporcionará la información deseada:

La primera columna nos dirá el propietario de la base de datos (en concreto, su login o nombre de usuario). A partir de este script, podemos filtrar por base de datos, mediante el campo "name":

O podemos conocer todas las bases de datos cuyo propietario sea un login concreto, aplicando de nuevo al campo "owner_sid" la función suser_sname: