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
Aquí se mencionan algunas otras soluciones:
y
SQL Server: ¿Cómo abortar una serie de lotes en el Analizador de consultas?
(raiseerror 20 con log, configura noexec, modo sqlcmd: en la salida de error, etc.)
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.
Sería usar una ayuda try catch block aquí. En caso de error, se cerrará el intento, implementar el manejo de errores en la captura
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.