No se puede ejecutar un ejecutable (sic) desde un DTS
Friday, June 29th, 2007Otro problema con el que me tope el dia de hoy, de esos con soluciones absurdas.
Para los que no conocen los DTS de SQL server, estos son simplemente una forma de agrupar varias tareas y posteriormente ejecutarlas en un solo movimiento. Puedes por ejemplo, traer un archivo de texto, importarlo a una tabla de SQL, y enviar un mail avisando que ya se realizo la tarea. Tiene muchas utilidades practicas.
Muy bien, lo que yo hice en mi DTS fue transformar un archivo de texto en un archivo de Excel, de manera que genero varias hojas de excel y algunas columnas son calculos de otras columnas. Para hacer esto, primero tengo que traer el archivo de texto de algun lado. Asi que lo mas sencillo para mi fue crear un batch que hiciera la tarea de traer este archivo y posteriormente ejecutarlo como la primera tarea de mi DTS.
Todo funcionaba bien en mis pruebas. El problema es que este DTS se manda a ejecutar desde una pagina web, y cuando lo hacia de esta manera, el bat no se ejecutaba.
Mi unica pista era este error en el log del DTS:
Step Error Source: Microsoft Data Transformation Services (DTS) Package
Step Error Description:CreateProcessTask ‘DTSTask_DTSCreateProcessTask_1′: Process returned code 1, which does not match the specified SuccessReturnCode of 0.
Step Error code: 80040496
Step Error Help File:sqldts80.hlp
Step Error Help Context ID:4900
Despues de escarbar un poco, di con la razon.
Resulta que la tarea de ejecutar archivos del DTS no (siempre) ejecuta el proceso en su ubicacion original, sino que hace una copia del mismo y desde ahi lo ejecuta. Al correrlo desde el Enterprise Manager todo funcionaba bien, pero al ejecutarlo remotamente, lo copiaba a alguna direccion desconocida. Y como mi bat tiene algunas direcciones relativas, pues no trabajaba como era debido.
La solucion: antes de ejecutar la tarea en el bat, tuve que cerciorarme que estuviera trabajando en el directorio correcto.
Esto aplica para cada aplicacion que desees correr desde un DTS, primero asegurate que estas ejecutandola en el sitio indicado. ∞