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 bat
osql -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