1 0 Tag Archives: Transact-SQL
post icon

Paginar consultas SQL con SQL Server 2012 o superior

Hace unos años veíamos como realizar consultas paginadas con sql en distintos motores, hacerlo con SQL Server con versiones inferiores a 2012 era bastante engorroso, llevaba un código molesto de leer e implementar y que puede cuestionarse su impacto negativo en el rendimiento en ciertas circunstancias.

Hoy veremos como puede hacerse esto de una forma más prolija y basada en SQL ANSI por fin lo haz hecho Microsoft.

La primer opción que tenemos es omitir una cantidad X de las primeras filas con la claúsula (Continuar Leyendo sobre Paginar consultas SQL con SQL Server 2012 o superior)

10 septiembre 2014
post icon

Generar un rango de filas para usar como producto cartesiano o como conjuto de datos en SQL Server

Otra de las tantas interrogantes que todo programador de SQL suele hacerse, es como generar filas dinámicamente sin leer datos de tablas, para cruzarlo con otras tablas o vistas y así obtener un producto cartesiano o un conjunto de resultados para unirlos con otros conjuntos. La típica solución suele ser usar un bucle como un while o un cursor, para insertar datos en alguna variable tipo tabla o una tabla temporal los cuales presentan serios problemas de rendimiento. De hecho, haremos unas pruebas con un millón de filas creadas en discos distintos, el primer (Continuar Leyendo sobre Generar un rango de filas para usar como producto cartesiano o como conjuto de datos en SQL Server)

post icon

Concatenar filas en una sola fila con valores separados por comas con SQL

Constantemente me topo con personas del ambiente laboral o de foros que me preguntan como pueden pasar las filas que les retorna un select a una sola columna y fila separando los valores por comas, por eso hoy publico este post.

Para lograr esto existen muchas vías, unas más optimas o complejas que otras. No voy a exponer cada una de esas técnicas, pero si veremos una de las maneras más sencillas y eficientes hacerlo. (Continuar Leyendo sobre Concatenar filas en una sola fila con valores separados por comas con SQL)

post icon

Reparar los usuarios huérfanos en SQL Server al restaurar la Base de Datos

Cuando se una reinstalación de un servidor Windows con SQL Server o una migración de las bases de datos a otro servidor se darán cuenta que los login que tenían en el servidor original ha dejado de funcionar.

La explicación de éste fenómeno es sencilla, para SQL Server los Login son objetos del servidor y los usuarios son objetos de las bases de datos. Cuando hacemos un backup y restauramos en otro servidor con el mismo se van los usuario pero no los login (La nueva versión de SQL Server Denali tendrá una opción para embeber los logins como objetos de la base de datos, lo que evitará este típico problema). Por lo tanto debemos crear de nuevo estos login en el nuevo servidor, pero eso no es todo. (Continuar Leyendo sobre Reparar los usuarios huérfanos en SQL Server al restaurar la Base de Datos)

post icon

Diferencias entre Indices Clustered y Non-Clustered en SQL Server

Si bien este es un tema que todo DBA debe conocer obligatoriamente para poder realizar el tunning de su base de datos quiero usarlo para explicar algunos conceptos básico para los siguientes artículos que estoy preparando sobre optimización del rendimiento de los querys SQL y comprensión de los planes de ejecución.

Lo que veremos aplica a las versiones 2005 y 2008 de SQL Server, aunque una gran parte también para la versión 2000. De hecho que varios de los conceptos también aplica a otros motores del mercado, unos con menos y otros con más opciones de tunning. (Continuar Leyendo sobre Diferencias entre Indices Clustered y Non-Clustered en SQL Server)

post icon

Como utilizar la cláusula OVER [Partition By / Order by] en SQL [Optimización]

Ver query’s con la cláusula OVER no es muy común, normalmente la mayoría de los programadores o DBA crean sub-query’s para obtener los mismos resultados, lo que en sí no es malo ya que logran visualizar los mismos datos. El problema principal se encuentra en el rendimiento que tiene uno y otro método.

El motor que sea que estés utilizando optimiza el tiempo de ejecución y los bloqueos de las filas cuando se escribe scripts con OVER ya que el mismo trabaja sobre los datos ya obtenidos, en vez de volver a recuperarlos de origen.

La cláusula OVER está definida en el estándar ISO de SQL, (Continuar Leyendo sobre Como utilizar la cláusula OVER [Partition By / Order by] en SQL [Optimización])

post icon

Listar las columnas y sus características de una tabla en SQL Server

Leer la metadata de SQL Server no es para nada complejo, y tiene una buena documentación. Una tarea útil y que es bastante buscada en los foros es listar las columnas de las tablas, con sus tipos de datos, Foreing Keys, Primary Keys, etc.

No es muy común hacer estas lecturas, pero si sirve para un DBA, o un desarrollador que quiere automatizar procesos o incluso crearse alguna especie de IDE personalizado.

En el siguiente query verán listados los nombres, el id, tipo de dato, precision, si soporta nulo, si es identity, sus FK entre otros. (Continuar Leyendo sobre Listar las columnas y sus características de una tabla en SQL Server)

post icon

Como utilizar los SavePoints en las transacciones de SQL Server

Las transacciones son un conjunto de operaciones que se deben completar el conjunto completo de instrucciones o ninguna normalmente. Pero existen los casos en donde tenemos varios pasos y si se ejecuta hasta cierto punto queremos hacer COMMIT de las operaciones, y simplemente deshacer el resto que arroja error.

Las circunstancias de uso no son muy comunes pero tampoco demasiado escasas. Para lograr esto podemos crear savepoints en nuestra transacción, es cuestión de agregar un poco más de control y líneas de código a lo que estamos acostumbrados.

En el siguiente script SQL verán un ejemplo simple y (Continuar Leyendo sobre Como utilizar los SavePoints en las transacciones de SQL Server)

post icon

Como crear cursores en SQL Server

A través de un cursor podemos recorrer filas de un conjunto de resultados, es decir, lo que devuelva una sentecia SELECT, y el mismo tiene una manera única de operar basada en su declaración, apertura, lectura, cierre y destrucción.

En muchos casos es la única manera de resolver un problema, pero no en todos ya que hay contextos en donde pueden ser resueltos de más de una forma evitando los cursores. Personalmente recomiendo usar la menor cantidad de estos ya que consumen muchos recursos del servidor y no se destaca precisamente en su velocidad de ejecución. Además que si trabajamos una regla larga de negocio es luego dificil mantenerlo (ya recuerdo un caso de un SP con 14 Cursores anidados, era la destrucción!) . (Continuar Leyendo sobre Como crear cursores en SQL Server)

post icon

Como verificar si se actualizó o no una columna en SQL Server

Cuando hacemos sistemas medianos a grandes es común encontrarse con que necesitamos cubrir reglas de negocios, accionando contra algunos eventos o validando situaciones, en muchos casos necesitaremos conocer si valor de una columna (más atómico que saber si se agrego o eliminó un registro) fue alterado o no.

Lo que hagamos ante este evento ya depende del contexto en el que se encuentra el sistema, pero puedo mostrarles como saber si esto sucede y existe 2 maneras ortodoxas de hacerlo, también veremos cual nos conviene utilizar en cada caso.

En SQL Server los triggers (desencadenadores) nos ayudarán a ello, siempre y cuando los eventos que reacciones tales triggers sean de INSERT o UPDATE.

La primer forma que tenemos de evaluar es preguntando si los valores de las columnas de las (Continuar Leyendo sobre Como verificar si se actualizó o no una columna en SQL Server)

Página 1 de 3123