visor studio remote registro puede microsoft management log eventos errores error_number error consultar conexion conectar con comunes sql-server ssms

sql-server - remote - sql server management studio download



¿Cómo consigo que SQL Server Management Studio deje de procesar un error? (8)

Esto parece una pregunta increíblemente estúpida, pero ¿cómo puedo hacer que SQL Server Management Studio deje de procesar una secuencia de comandos SQL cuando encuentra un error?

Tengo un script largo y si hay un error al inicio, SSMS lo reporta y luego continúa ciegamente, arruinando las cosas aún más. No puedo usar transacciones porque el script crea varias bases de datos y no pueden entrar en una transacción. Es la creación de la base de datos que a veces falla.

Toad para SQL Server se detendrá en el primer error que encuentre y le preguntará si desea detener o continuar. Este es el comportamiento que estoy buscando. ¿Existe en SSMS?

No pregunto: "¿Cómo escribo o modifico un script para que se detenga en un error?" No estoy interesado en modificar mi script para que esto suceda, solo quiero que SSMS se detenga en un error . Toad for SQL Server hace exactamente esto y ese es el comportamiento que quiero. Esto tampoco es un duplicado de 659188 porque se relaciona con la modificación de la secuencia de comandos para detener el SSMS.


ApexSQL Script genera secuencias de comandos por lotes exactamente de la manera que desee. Como ejemplo:

--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



Guau. Eso es un poco de basura no es así? Yo uso SQL-Workbench que, como Toad para SQL Server, maneja esto fácilmente. A diferencia de Toad para SQL Server, sin embargo, es gratis.

Me sorprende que tal funcionalidad fundamental no sea parte de la herramienta estándar.


Necesita envolver sus declaraciones SQL dentro de una Transaction .

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

Si hay un error dentro de la transacción de inicio / finalización, todas las declaraciones se revertirán.

EDITAR: Envolver dentro de la transacción inicial / final, evitará que las declaraciones se confirmen en la base de datos, pero no la detendrá en ese momento. También debe envolverlo dentro de un bloque try / catch de la siguiente manera:

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


Respuesta corta: No puedes.

Gracias a los que proporcionaron soluciones alternativas, pero parece que SSMS en sí no puede configurarse para pausar o detener un error de la misma manera que Toad para SQL Server.



Si no puede poner su script en un procedimiento almacenado y usar la declaración de retorno para salir en caso de error, la solución provista por @Justice podría ser su mejor opción. A todos los demás les falta el punto: no puede regresar de un script, incluso si usa transacciones o incluso si es raiserror. SSMS solo ejecutará lo siguiente de todos modos, incluso si está activada la opción abortar de xact.

Si puede convertir su secuencia de comandos a un procedimiento almacenado, puede regresar de él cuando detecte un error.


considere usar el programa de línea de comandos ''sqlcmd'' que viene con SQL Server, con las opciones -b y -V establecidas. -b hará que sqlcmd se cierre cuando se produce un error. -V controla el nivel de gravedad que se considera un error.