sql >> Base de Datos >  >> RDS >> Sqlserver

SQL Server:¿Cómo abortar una serie de lotes en Query Analyzer?

Así es como lo haría:

PRINT 'This runs'
go

SELECT 0/0, 'This causes an error'
go
if (@@error <> 0)
    Begin
    set nocount on
    set noexec on
    End
GO

PRINT 'This should not run'
go

set noexec off
set nocount off
GO

El modo "noexec" pone a SSMS en un estado en el que solo compila el T-SQL y en realidad no lo ejecuta. Es similar a presionar accidentalmente el botón Analizar de la barra de herramientas (Ctrl+F5) en lugar de Ejecutar (F5).

No olvide volver a desactivar noexec al final de su secuencia de comandos. De lo contrario, los usuarios se confundirán con los "Comando(s) completado(s) con éxito" permanentes. mensajes.

Utilizo la verificación contra @@error en el lote posterior en lugar de usar bloques TRY CATCH. El uso de @@error en el siguiente lote detectará errores de compilación, como "la tabla no existe".

Además del modo noexec, también cambio el modo nocount. Con el modo noexec activado y sin contar desactivado, sus consultas seguirán mostrando un mensaje "(0 filas afectadas)". El mensaje siempre informa cero filas, porque está en modo noexec. Sin embargo, activar nocount suprime estos mensajes.

También tenga en cuenta que si ejecuta SQL Server 2005, el comando que está omitiendo aún puede generar mensajes de error si hace referencia a una tabla que no existe y el comando si es el primero del lote. Obligar a que el comando sea el segundo comando del lote con una declaración de impresión falsa puede suprimir esto. Consulte MS Bug #569263 para más detalles.