2012-06-04 18 views
6

¿SQL actualizará un registro si no hay cambios en el registro?¿SQL actualizará un registro si los nuevos valores son los mismos?

Para examople, es más eficiente para reemplazar

UPDATE TABLE myTable 
Set Col1 = ISNULL(Col1,'') 
... 
Set Col100 = ISNULL(Col30,'') 

con

UPDATE TABLE myTable 
Set Col1 = ISNULL(Col1,'') 
... 
Set Col100 = ISNULL(Col30,'') 
WHERE 
Col1 IS NULL OR 
... 
Col30 IS NULL 
+1

Sí. T-SQL no intenta averiguar si los valores de columna han cambiado o no. Si especifica una fila que se actualizará en una declaración 'UPDATE', ** se ** actualizará, si es necesario o no. Si no es necesario en primer lugar, entonces ** no ** ponga eso en su declaración SQL –

+0

Sí, actualizará la tabla. Más eficiente es una pregunta diferente. Tenga en cuenta que los disparadores no se dispararán si no se realiza una actualización, p. en tu segundo ejemplo. Eso podría ser bueno o malo según tu intención. – HABO

Respuesta

5

Sí, intentará sobrescribir.

+0

Eso es lo que pensé. thx – ChadD

+1

No creo que ninguna base de datos pueda optimizar las actualizaciones. Evitaría que se dispararan los activadores de actualización. –

+0

@Gordon: MySQL lo hace. –

1

Tienes que controlarlo manualmente, en la cláusula where puedes poner todos los campos si son diferentes a los nuevos valores, y donde el ID de tu tabla es igual a tu parámetro, te asegurarás de que solo los registros modificados estar actualizado.

UPDATE table 
    SET field1 = @field1, 
       field2 = @field2 
    WHERE field1 != @field1 AND 
      field2 != @field2 AND 
      id = @id 
Cuestiones relacionadas