2012-07-25 6 views
5

En la siguiente declaración, ¿f1 siempre obtendrá el valor que f2 solía tener? ¿O a veces se actualizará f2 primero y f1 termina con NULL? Tengo la impresión de que los nuevos valores no están disponibles en la declaración, que f2 tiene el valor anterior mientras procesaba el registro, pero no puedo encontrar un lugar autorizado que diga esto.Actualización de SQL usando valores del mismo registro

UPDATE x 
SET 
    x.f1 = x.f2, 
    x.f2 = NULL 

Respuesta

3

Conceptualmente la operación pasa "all at once" por lo que utilizará el "antes" valores

De hecho

UPDATE x 
SET 
x.f1 = x.f2, 
x.f2 = x.f1 

también funcionaría bien para intercambiar los dos valores de columna.

+0

Gracias! 'todo a la vez' era el término/concepto que necesitaba buscar y leer. Aclamaciones. –

2

f1 siempre llegan f2 's valor anterior antes de la UPDATE.

Técnicamente hablando, el registro se elimina y se reinserta. Entonces SQL resolverá cuál debe ser el nuevo registro, luego eliminará el registro actual e insertará el nuevo registro posteriormente.

este artículo en relación con disparadores SQL puede ayudar a explicar:

Los tabla almacena eliminados copias de las filas afectadas por las sentencias DELETE y UPDATE. Durante la ejecución de una instrucción DELETE o UPDATE, las filas se eliminan de la tabla de desencadenantes y se transfieren a la tabla eliminada. La tabla eliminada y la tabla de desencadenantes normalmente no tienen filas en común.

La tabla insertada almacena copias de las filas afectadas durante las instrucciones INSERT y UPDATE. Durante una operación de inserción o actualización, se agregan nuevas filas tanto a la tabla insertada como a la tabla activadora. Las filas en la tabla insertada son copias de las nuevas filas en la tabla del desencadenador.

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

+0

¿Qué quiere decir "Técnicamente hablando" el registro se elimina y se reinserta? SQL Server puede hacer actualizaciones en el lugar. Y TBH, simplemente no veo la relevancia de los desencadenantes aquí. –

+0

@MartinSmith Ver el texto citado. Estuve bajo la impresión durante los registros de ACTUALIZACIÓN se eliminan e insertan? – Curt

+0

Solo en algunas circunstancias. por ejemplo, si la columna clave de índice agrupado se actualiza y, por lo tanto, la fila necesita moverse. –

Cuestiones relacionadas