update transaction trans tran stored example delete begin sql sql-server transactions

transaction - SQL Server BEGIN/END vs BEGIN TRANS/COMMIT/ROLLBACK



sql server tran rollback (5)

He estado tratando de encontrar información en la web sobre las diferencias entre estas declaraciones, y me parece que son idénticas, pero no puedo encontrar confirmación de eso ni de ningún tipo de comparación entre las dos.

¿Cuál es la diferencia entre hacer esto?

BEGIN -- Some update, insert, set statements END

y haciendo esto

BEGIN TRANS -- Some update, insert, set statements COMMIT TRANS

?

Tenga en cuenta que solo existe la necesidad de revertir en el caso de alguna excepción o tiempo de espera u otra falla general, no habría una razón condicional para revertir.


BEGIN y END tratan con bloques de código. Son similares a las llaves que se ven en muchos idiomas:

if (somethingIsTrue) { // like BEGIN // do something here } // like END

En SQL, esto es:

if somethingIsTrue BEGIN -- do something here END

BEGIN TRAN , COMMIT y ROLLBACK inician y finalizan las transacciones . No especifican un nuevo bloque de código; sólo marcan los límites de la transacción.

Tenga en cuenta que puede escribir un BEGIN TRAN y COMMIT en bloques de código separados. Por ejemplo, si desea que el código sea parte de una transacción, pero no quiere comenzar uno nuevo si el código ya está en una transacción, puede hacer algo como esto:

declare @TranStarted bit = 0 if @@trancount = 0 begin set @TranStarted = 1 begin tran end -- ... do work ... if @TranStarted = 1 begin commit set @TranStarted = 0 end


Debe mencionarse, que hay un Principio; en PostgreSQL, eso también inicia un bloque de transacción, que al principio me confundió.

http://www.postgresql.org/docs/9.0/static/sql-begin.html

"BEGIN inicia un bloque de transacción, es decir, todas las declaraciones después de un comando BEGIN se ejecutarán en una sola transacción hasta que se proporcione un COMPROMISO o ROLLBACK explícito. De forma predeterminada (sin BEGIN), PostgreSQL ejecuta transacciones en modo" autocommit ", es decir , cada declaración se ejecuta en su propia transacción y un compromiso se realiza implícitamente al final de la instrucción (si la ejecución fue exitosa, de lo contrario se realiza una reversión) ".


Estas 2 declaraciones son completamente diferentes.

BEGIN..END marca un bloque de código, por ejemplo, en una sentencia if

IF @something = 1 BEGIN -- Do something when @something is equal to 1 END

BEGIN TRANS..COMMIT TRANS envuelva el bloque que encierra en una transacción y, dependiendo de la configuración del servidor, se revertirá la transacción si se produce un error.


Los BEGIN y END regulares no se utilizan para transacciones. En su lugar, son solo para indicar que algún bloque de código es una sola unidad, como las llaves {} en C # / C ++ / Java.

Si tiene una declaración IF o un bucle WHILE que hace 10 cosas, debe incluirlas en BEGIN / END para que SQL Server sepa que toda la lista de 10 declaraciones debe ejecutarse como parte de esa condición.


No he visto END TRANS :)

Creo que usamos END solo para la palabra clave BEGIN, no para BEGIN trans, usamos commit o rollback para BEGIN trans