Al tratar con bases de datos, hay veces que quieres que un proceso se ejecute de vez en cuando. En Windows esto tiene un nombre: tareas programadas. En las tareas programadas (en Windows Vista, Windows 7 y Windows 8 se llama Programados de Tareas), el usuario puede seleccionar un programa .exe (o un archivo .bat) y hacer que este se ejecute a una hora determinada y a un día determinado, además de poder decidir cada cuando se tienen que ejecutar.
Esto que acabo de describir se puede trasladar a SQL Server en forma de Jobs. Los Jobs es parecido a las Tareas programadas: tu puedes escribir una sentencia SQL (ya sea un Insert, un Update, un Delete, etc…) y hacer que esta sentencia se ejecute cada X tiempo y, si quieres, de forma repetitiva. Esto va fenomenal si tienes que ejecutar alguna sentencia bastante a menudo.
Problema
Esto que suena tan bien tiene una problemática: esto funciona con el SQL Server Agent y, lamentablemente, el SQL Server Agent no está en las versiones SQL Server Express (Wikipedia). Entonces, ¿Qué se hace en estos casos? Si algo tenemos los informáticos es que somos cabezones, y para solucionar un problema hacemos lo que sea con todas las herramientas que tenemos disponibles, aunque tengamos que reducirnos a lenguajes de bajo nivel (como es el caso).
Detalle interesante
Buscando la solución me he topado con un hilo bastante interesante de Stack Overflow. Y de aquí he podido sacar lo siguiente:
You can create jobs “manually” by creating batch files and SQL script files, and running them via Windows Task Scheduler.
Vayamos atrás un momento. Si habéis estado atentos, he hablado de las tareas programadas de Windows. Y si habéis leído bien, habréis leído que puede ejecutar archivos .bat. Los archivos .bat son archivos sin formato (se pueden crear desde el bloc de notas salvando el archivo como .bat) que contienen comandos de MS-DOS, y estos comandos (copiar, pegar, leer archivo…), a pesar de ser limitados, tienen mucho poder si se saben combinar entre si.
¿Que hay que hacer?
- 1.- Vamos a crear un archivo .bat que tenga un comando de lectura de un archivo SQL.
- 2.- Crearemos un archivo .SQL que tendrá la sentencia que queramos ejecutar
- 3.- Realizaremos la tarea programada que se encargará de ejecutar el archivo .bat
1.- Configurando el archivo .bat
Abramos un bloc de notas (o el notepad++) y escribamos la siguiente rutina:
SQLCMD -S <instanciaSQL> -I nombrearchivo.sql
Qué hace cada cosa?
- SQLCMD: llama a la consola de comandos de SQL Server
- -S: este comando indica que queremos definir una instancia de SQL Server (una instancia es el nombre del servidor de datos del SQL Server)
- : aquí ponemos el nombre de la instancia
- -I: este comando indica que queremos abrir un fichero
- nombrearchivo.sql: aquí ponemos la ruta donde está el fichero .sql
Una vez hecho, guardamos el fichero con extensión .bat (archivo –> Guardar como… –> Seleccionamos “Todos los archivos” –> ponemos el nombre con extensión .bat).
Una parte ya la teníamos hecha, falta hacer la segunda parte: la creación del archivo .sql.
2.- Creando el archivo .sql
Como antes, abrimos el bloc de notas (o el Notepad++) y escribimos la sentencia SQL que queramos. Una vez hecho, guardamos el fichero con extensión .sql (archivo –> Guardar como… –> Seleccionamos “Todos los archivos” –> ponemos el nombre con extensión .sql).
3.- Programando la tarea
Nos vamos a las tareas programadas (están en el panel de control) y nos aparecerá el asistente. Cuando nos pregunte cual es el fichero que queremos abrir, seleccionamos el archivo .bat. Entonces, seleccionamos la hora y el periodo de repetición y ya estará todo configurado.
4.- Final
Una vez hecho esto ya tendremos una forma automatizada de ejecutar sentencias SQL en caso que tengamos SQL Server Express.
Espero que os sirva de ayuda