parent nodes: BackupDeBaseDeDatos | SQLapuntes
osql
Es el programa de consola de SQL Server, para poder ejecutar scripts en procesos por lotes (.bat)
Ayuda
osql: unknown option -help
usage: osql [-U login id] [-P password]
[-S server] [-H hostname] [-E trusted connection]
[-d use database name] [-l login timeout] [-t query timeout]
[-h headers] [-s colseparator] [-w columnwidth]
[-a packetsize] [-e echo input] [-I Enable Quoted Identifiers]
[-L list servers] [-c cmdend] [-D ODBC DSN name]
[-q "cmdline query"] [-Q "cmdline query" and exit]
[-n remove numbering] [-m errorlevel]
[-r msgs to stderr] [-V severitylevel]
[-i inputfile] [-o outputfile]
[-p print statistics] [-b On error batch abort]
[-X[1] disable commands [and exit with warning]]
[-O use Old ISQL behavior disables the following]
<EOF> batch processing
Auto console width scaling
Wide messages
default errorlevel is -1 vs 1
[-? show syntax summary]
Uso
Para actualizar a la versión 80 de BDD en SIGC hay que ejecutar el siguiente proceso batosql -E -d %1 -i "cambiosColegios.sql" -o "actualizaV80.txt"
-E conexión de confianza
-d use database name, el nombre se le da como parámetro del .bat
-i input file
-o output file
OJO fallos con OSQL
El script siguiente funciona desde el analizador de consultas pero no va desde el osql SELECT NOTARIOS.IDENTIFICACION, NOTARIOS.NOMBRE, ACUM_MES.ID_ACUM_MES, ACUM_MES.EJERCICIO, ACUM_MES.MES, ACUM_MES.ORDEN,
LIQUIDACION.ID_APUNTE, T1.ID_APUNTE, T1.OBSERVA
FROM LIQUIDACION INNER JOIN ACUM_MES ON LIQUIDACION.ID_ACUM_MES = ACUM_MES.ID_ACUM_MES
INNER JOIN NOTARIOS ON ACUM_MES.ID_NOTARIOS = NOTARIOS.ID_NOTARIO
LEFT JOIN
( SELECT A.ID_APUNTE, A.EJERCICIO, LA.ID_CLIENTE, OBSERVA, LA.CANTIDAD
FROM APUNTE A INNER JOIN LINEAPUNTE LA ON A.ID_APUNTE = LA.ID_APUNTE
WHERE LA.DH = 'D'
) T1 ON
( T1.ID_CLIENTE = NOTARIOS.ID_NOTARIO /*AND ( ABS(T1.CANTIDAD - LIQUIDACION.TOTAL) < 0.001 )*/ AND
T1.OBSERVA = ('Liquid. Mes:' + CAST(ACUM_MES.MES AS VARCHAR)+ ' Año:' + CAST( @ANIO AS VARCHAR ) + '-' + CAST(ACUM_MES.ORDEN AS VARCHAR) )
)
WHERE ACUM_MES.EJERCICIO = @ANIO AND ACUM_MES.LIQUIDACION_GENERADA = 1 AND LIQUIDACION.TOTAL > 0.00 AND LIQUIDACION.ID_APUNTE = 0
El problema es que el campo T1.OBSERVA es una cadena y va entre comillas, esto hace que el osql no lo pille bien (por tema de comillas). La solución para ese script lo hice con cursores y en lugar de formar una cadena grande concatenando varias pequeñas, lo que he hecho es partir la cadena grande y comparar parte a parte: SET @NEW_APUNTE = ( SELECT APUNTE.ID_APUNTE FROM APUNTE INNER JOIN LINEAPUNTE ON APUNTE.ID_APUNTE = LINEAPUNTE.ID_APUNTE
WHERE LINEAPUNTE.DH = 'D' AND LINEAPUNTE.ID_CLIENTE = @ID_NOTARIO
AND ( ABS( LINEAPUNTE.CANTIDAD - @TOTAL ) < 0.001 )
AND SUBSTRING( LINEAPUNTE.OBSERVA, 13, 2 ) = CAST( @MES AS VARCHAR(2) )
AND SUBSTRING( LINEAPUNTE.OBSERVA, 20, 4 ) = CAST( @EJERCICIO AS VARCHAR(4) )
AND SUBSTRING( LINEAPUNTE.OBSERVA, 25, 1 ) = CAST( @ORDEN AS VARCHAR(1) )
);
Esto si que funciona en osql.
Prueba
Si falla la instalación puede ser por el nombre del servidor o por que el usuario/pwd no está bien introducido en el sql server, para ello probar en consola lo siguiente:
osql -S NombreServidor -d NombreBDD -U usuario -P ***** -i v128.sql -o v128.txt
o incluso sin el archivo de log para que salga por pantalla: osql -S NombreServidor -d NombreBDD -U usuario -P ***** -i v128.sql