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.
Réponses
Trop de publicités? 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 .
Non, il n'y en a pas un qui vous avez deux options:
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)
Utiliser l'instruction de retour au top (encore une fois, dans la limite du lot de séparateurs)
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.
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
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
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;