2008-12-08 17 views
42

En SQL Server 2005 Management Studio, parece que el resultado de las instrucciones PRINT no aparece inmediatamente: si tengo una instrucción PRINT seguida de una instrucción de larga ejecución, la IMPRESIÓN La salida no aparece hasta después de la siguiente declaración.SQL Server: la salida de IMPRESIÓN no aparece inmediatamente

¿Hay alguna forma de purgar la salida antes? Estoy ejecutando algunas secuencias de comandos de actualización que tardan una semana en completarse, y me gustaría saber qué tan avanzado está el guión (así que sé si esperar unos minutos y luego comenzar el siguiente, o si ir a almorzar)

+0

¿Tiene una "IR" del medio impreso y la declaración de carreras de larga? –

+2

posible duplicado de [¿Cómo descargo el búfer de IMPRESIÓN en TSQL?] (Http://stackoverflow.com/questions/306945/how-do-i-flush-the-print-buffer-in-tsql) – usr

+0

Roger: Vi su despotricamiento en http://blog.differentpla.net/blog/2006/10/19/bad-ui-why-sql-query-analyzer-sucks. Tengo la misma queja. ¿Por qué necesito ver mi información de inicio de sesión y las palabras "SQLQuery999.sql" en ese espacio corto que excluye toda la información importante, ¿no? Me alegra verte hablar aunque no cambiará nada. Tengo que recurrir a utilizar la interfaz proporcionada por Visual Studio usando el explorador de servidores para que ocurra un accidente menos mortal. –

Respuesta

70

No. Solo se devolverán cuando se confirme una transacción, cuando se devuelvan otros conjuntos de registros o se complete una declaración (terminador de sentencias go en un lote SQL). Puede usar raiserror en niveles de error no fatales (0-18) para obtener comentarios inmediatos de este tipo. Por ejemplo:

RAISERROR ('Foo', 10, 1) WITH NOWAIT 
+0

En mis pruebas, las IMPRESIONES antes de RAISERROR se imprimirán –

+0

Las impresiones aparecerán antes de la salida de RAISERROR pero no se devolverán al cliente hasta que se produzca la excepción. – ConcernedOfTunbridgeWells

-3

Para mí funcionó simplemente al poner el comando GO después de los comandos de impresión, p.

print 'test' 
print 'test' 
go 

En general, mi conclusión es lo siguiente: la salida de la ejecución del script mssql, la ejecución de interfaz gráfica de usuario de SMS o con sqlcmd.exe, se vacía en un archivo, stdoutput, ventana de interfaz gráfica de usuario en la primera instrucción GO o hasta el final de la guión.

Enjuagar dentro del procedimiento almacenado funciona de forma diferente, ya que no puede colocar GO dentro.

Referencia: tsql Go statement

+5

Pero si utiliza una instrucción GO, agota sus variables escalares por lo que no es una buena solución. – Shane

Cuestiones relacionadas