60 votes

Commande T-SQL STOP ou ABORT dans SQL Server

Existe-t-il une commande dans T-SQL de Microsoft SQL Server pour indiquer au script d’arrêter le traitement? J'ai un script que je veux conserver à des fins d'archivage, mais je ne veux pas que quelqu'un le gère.

53voto

Jed Points 3592

Une autre solution pourrait consister à modifier le flux d’exécution de votre script en utilisant l’instruction GOTO ...

 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!
 

Attention! L'échantillon ci-dessus est dérivé d'un exemple que j'ai obtenu de Merrill Aldrich. Avant d'implémenter aveuglément l'instruction GOTO , je vous recommande de lire son tutoriel sur le contrôle de flux dans les scripts T-SQL .

40voto

chadhoc Points 3197

Non, il n'y en a pas un qui vous avez deux options:

  1. Enveloppez l'ensemble du script dans un grand si/fin de bloc qui est tout simplement veillé à ne pas être vrai (c'est à dire "si 1=2 de commencer" - cela ne fonctionnera toutefois, si le script ne comprend pas tout de GO états (comme ceux qui indiquent un nouveau lot)

  2. Utiliser l'instruction de retour au top (encore une fois, dans la limite du lot de séparateurs)

  3. Utiliser une connexion de base de l'approche, ce qui permettra de s'assurer de la non-exécution de l'intégralité du script (l'ensemble de la connexion pour être plus précis) - utiliser quelque chose comme un 'SET PARSEONLY SUR' ou 'SET NOEXEC SUR" en haut du script. Cela permettra d'assurer que toutes les instructions du lien (ou jusqu'à ce que ladite instruction set est éteint) ne s'exécute pas et va plutôt être analysée/compilé seulement.

  4. Utilisez un bloc de commentaire commenter l'intégralité du script (c'est à dire /* et */)

EDIT: la Démonstration que le "retour" déclaration de lot spécifique de la note que vous continuerez à voir des résultats après les retours:

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

19voto

Sparky Points 9253

Pourquoi ne pas simplement ajouter ce qui suit au début du script

 PRINT 'INACTIVE SCRIPT'
RETURN
 

17voto

gbn Points 197263

Pour contourner le problème RETURN / GO, vous pouvez placer RAISERROR ('Oi! Stop!', 20, 1) WITH LOG en haut.

Cela fermera la connexion client selon RAISERROR sur MSDN .

Le très gros inconvénient est que vous devez être administrateur système pour utiliser la gravité 20.

Modifier:

Une démonstration simple pour contrer le commentaire de Jersey Dude ...

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

9voto

RAISERROR de gravité 20 sera signalé comme une erreur dans l'observateur d'événements.

Vous pouvez utiliser SET PARSEONLY ON; (ou NOEXEC). À la fin du script, utilisez GO SET PARSEONLY OFF;

 SET PARSEONLY ON;
-- statement between here will not run

SELECT 'THIS WILL NOT EXEC';

GO
-- statement below here will run

SET PARSEONLY OFF;
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X