Comment puis-je obtenir SQL Server Management Studio pour arrêter le traitement sur une erreur?

StackOverflow https://stackoverflow.com/questions/846336

  •  21-08-2019
  •  | 
  •  

Question

Cela semble être une question incroyablement stupide d'avoir à demander, mais comment puis-je obtenir SQL Server Management Studio pour arrêter le traitement d'un script SQL lorsqu'il rencontre une erreur?

J'ai un script long et s'il y a une erreur au début des rapports SSMS, puis porte aveuglément, plissant les choses encore plus. Je ne peux pas utiliser des transactions parce que le script crée plusieurs bases de données et ils ne peuvent pas aller dans une transaction. Il est la création de base de données qui fait parfois défaut.

Toad for SQL Server se met en pause à la première erreur qu'il rencontre et demandez si vous voulez arrêter ou continuer. C'est le comportement que je suis à la recherche. Existe t-il dans SSMS?

Je suis pas demander: « Comment puis-je écrire ou modifier un script afin qu'il arrête sur une erreur? » Je ne suis pas intéressé à modifier mon script pour ce faire, je veux juste SSMS à arrêter sur une erreur . Toad for SQL serveur fait exactement ce et qui est le comportement que je veux. Cela n'est pas un double de 659188 parce que a trait à la modification du script pour arrêter SSMS.

Était-ce utile?

La solution

Réponse courte:. Vous ne pouvez pas

Merci à tous ceux qui ont fourni des solutions de contournement, mais il semble que SSMS lui-même ne peut pas être réglé sur pause ou arrêter sur une erreur de la même manière que Toad for SQL Server peut.

Autres conseils

ApexSQL script génère des scripts batch exactement de la manière que vous voulez. A titre d'exemple:

--Script Header
begin transaction
go

{Statement #1}
go
--Standard Post-Statement Block
if @@error <> 0 or @@trancount = 0 begin
    if @@trancount > 0 rollback transaction
    set noexec on
end
go

{Statement #2}
go
--Standard Post-Statement Block
if @@error <> 0 or @@trancount = 0 begin
    if @@trancount > 0 rollback transaction
    set noexec on
end
go

--Script Footer
if @@trancount > 0 commit transaction
go
set noexec off
go

envisager d'utiliser le programme de ligne de commande « sqlcmd » qui vient avec SQL Server, avec le -b et les options de -V définies. -b provoquera sqlcmd de quitter quand il frappe une erreur. -V contrôle le niveau de gravité qui est considéré comme une erreur.

Vous avez besoin d'envelopper vos instructions SQL dans un Transaction .

BEGIN TRANSACTION
   /* run all your SQL statements */
COMMIT TRANSACTION

S'il y a une erreur dans le début / transaction fin, toutes les déclarations seront annulées.

EDIT: Emballage à l'intérieur à l'intérieur commencer / transaction fin, empêchera les déclarations de s'engage à la base de données, mais pas l'arrêter à ce moment-là. Vous devez envelopper en plus à l'intérieur d'un bloc try / catch comme suit:

BEGIN TRY
  BEGIN TRANSACTION
  /* run all your SQL statements */
  COMMIT TRANSACTION
END TRY
BEGIN CATCH
  ROLLBACK TRANSACTION
END CATCH

Wow. C'est un peu ordures est pas? J'utilise SQL-Workbench qui, comme Toad for SQL Server, gère facilement. Contrairement à Toad for SQL Server cependant, il est gratuit.

Je suis étonné que cette fonctionnalité fondamentale ne fait pas partie de l'outil standard.

serait à l'aide d'une aide de bloc catch try ici. En cas d'erreur l'essai sera sorti, mettre en œuvre la gestion des erreurs dans les prises

http://msdn.microsoft.com/en-us/library /ms179296.aspx

Si vous ne pouvez pas mettre votre script dans une procédure stockée et utilisez l'instruction de retour à la sortie en cas d'erreur, la solution fournie par @Justice pourrait être votre meilleur pari. Tout le monde manque le point - vous ne pouvez pas revenir d'un script, même si vous utilisez des transactions ou même si vous RAISERROR. SGSS sera juste la prochaine chose exécuter de toute façon, même si elle est définie abort xact est activée.

Si vous pouvez convertir votre script à une procédure stockée, vous pouvez simplement en revenir quand vous détectez une erreur.

Il y a quelques contournements mentionnés ici:

SQL Server - arrêter ou interrompre l'exécution d'un script SQL

et

SQL Server: Comment annuler une série de lots dans Query Analyzer?

(RaiseError 20 avec log, fixé sur noexec, le mode sqlcmd:. À la sortie d'erreur, etc.)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top