Como lo mencionaron Nick y Martin, el estado eventual de su consulta depende de si SQL Server conoce la extracción de cable de su red antes de que se complete la consulta. De Books Online (aunque me parece interesante que haya temas equivalentes para esto en 2000 , 2005 , 2008 y 2008 R2 , pero no en 2012 o 2014):
Si un error impide la finalización exitosa de una transacción, SQL Server revierte automáticamente la transacción y libera todos los recursos que posee. Si la conexión de red del cliente a una instancia del Motor de base de datos se interrumpe, cualquier transacción pendiente para la conexión se revierte cuando la red notifica a la instancia del corte. Si la aplicación del cliente falla o si la computadora del cliente se cae o se reinicia, esto también interrumpe la conexión, y la instancia del Motor de base de datos revierte las conexiones pendientes cuando la red lo notifica. Si el cliente cierra la sesión de la aplicación, las transacciones pendientes se revierten.
(Por otro lado, las conexiones de palabras en la 2da última oración probablemente fueron transacciones . No sé cómo se deshace una conexión).
De manera similar, SQL Server puede deshacer o rehacer transacciones durante la recuperación después de que el servidor se cierre inesperadamente, y esto dependerá del estado de la transacción en el momento del cierre. He visto a personas usar esta táctica para lograr lo que estaba tratando de hacer (cancelar las transacciones) y cuando el servidor se inició nuevamente, gran parte del trabajo fue simplemente rehecho (por lo que el efecto neto de su reacción instintiva estuvo mucho más cerca a cero de lo que esperaban).
Entonces, en lugar de estar sujeto a esto, en lugar de hacer cosas drásticas en pánico, como tirar de un cable de red o apagar la máquina, sugiero que en el futuro tenga una mejor disciplina sobre la ejecución de consultas ad hoc contra sistemas importantes. Por ejemplo, en lugar de:
UPDATE dbo.sometable
-- where *oops* I forgot this part
Tengo esto:
BEGIN TRANSACTION;
UPDATE dbo.sometable
-- where *oops* I forgot this part
-- COMMIT TRANSACTION;
-- ROLLBACK TRANSACTION;
Luego, si la actualización fue correcta, puede resaltar la COMMIT
parte y ejecutarla. Si no fuera así, puede resaltar con calma la ROLLBACK
parte y ejecutarla. Incluso puede usar complementos como SSMS Tools Pack para editar su New Query
plantilla para incluir esa plantilla.
Ahora aún podría meterte en problemas en caso de que ejecutes la consulta y luego no confirmes ni reviertas, porque ahora tu transacción está bloqueando a otros usuarios. Pero esto es mejor que modificar irrevocablemente los datos.
Y, por supuesto, como siempre, tenga una copia de seguridad en la que pueda confiar.