32 votos

T-SQL DETENER o cancelar el comando de SQL Server

Hay un comando en el Servidor de Microsoft SQL, T-SQL para decirle a la secuencia de comandos para detener el procesamiento? Tengo un script que quiero conservar para fines de archivo, pero no quiero que nadie para ejecutarlo.

26voto

Jed Puntos 3592

Una solución alternativa podría ser modificar el flujo de ejecución de la secuencia de comandos mediante el uso de la GOTO declaración...

DECLARE  @RunScript bit;
SET @RunScript = 0;

IF @RunScript != 1
BEGIN
RAISERROR ('Raise Error does not stop processing, so we will call GOTO to skip over the script', 1, 1);
GOTO Skipper -- This will skip over the script and go to Skipper
END

PRINT 'This is where your working script can go';
PRINT 'This is where your working script can go';
PRINT 'This is where your working script can go';
PRINT 'This is where your working script can go';

Skipper: -- Don't do nuttin!

Advertencia! El ejemplo anterior se deriva de un ejemplo que recibí de Merrill Aldrich. Antes de implementar el GOTO declaración ciegamente, le recomiendo que lea su tutorial sobre el control de Flujo en T-SQL Scripts.

24voto

chadhoc Puntos 3197

No, No hay uno que tiene un par de opciones:

  1. Envuelva todo el script en un grande si/fin de bloque que es, simplemente, aseguró que no es cierto (es decir, "si 1=2 de comenzar" - esto sólo funcionará sin embargo, si la secuencia de comandos no incluye IR declaraciones (como los que indican un nuevo lote)

  2. Uso de la instrucción return en la parte superior (de nuevo, limitado por el lote separadores)

  3. El uso de una conexión de base de enfoque, lo que garantizará la no ejecución de la secuencia de comandos completa (toda la conexión, para ser más precisos) - usar algo como un 'CONJUNTO de PARSEONLY EN' o 'CONJUNTO de NOEXEC' en la parte superior de la secuencia de comandos. Esto asegurará que todas las declaraciones en la conexión (o hasta que dicho instrucción set se apaga) no se ejecutará y en lugar de ello analiza/compilado solo.

  4. El uso de un bloque de comentario para comentar toda la secuencia de comandos (es decir, / * y */)

EDIT: Demostración de que la "devolución" de la declaración es el lote específico - tenga en cuenta que usted va a continuar para ver el resultado-establece después de las devoluciones:

select 1
return
go
select 2
return
select 3
go
select 4
return
select 5
select 6
go

12voto

Sparky Puntos 9253

¿Por qué no simplemente agregue lo siguiente al principio de la secuencia de comandos

PRINT 'INACTIVE SCRIPT'
RETURN

10voto

gbn Puntos 197263

Para evitar el RETORNO/IR problema podría poner RAISERROR ('Oi! Stop!', 20, 1) WITH LOG en la parte superior.

Esto cerrará la conexión del cliente como por RAISERROR en MSDN.

El muy gran inconveniente es que tiene que ser sysadmin para uso gravedad de 20.

Editar:

Una simple demostración para contrarrestar Jersey Amigo del comentario...

RAISERROR ('Oi! Stop!', 20, 1)  WITH LOG
SELECT 'Will not run'
GO
SELECT 'Will not run'
GO
SELECT 'Will not run'
GO

2voto

gizmoboy Puntos 160

GBN es Correcta:

RAISERROR ('Message', 20, 1)

va a trabajar.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X