2011-06-14 29 views
27

Un colega mío dice que SQL Server guarda la fecha y hora de la última modificación en una "columna oculta" en cada registro. Estoy bastante seguro de que dijo algo mal. ¿Me puedes confirmar esto?Fecha de la fila SQL Server modificada por última vez

+0

Es posible que su colega confunda con SCN_TO_TIMESTAMP de Oracle, que es una fecha aproximada de compromiso de los datos. – Dom

Respuesta

37

Como los otros insinúan, su colega debe estar hablando de un galimatías o refiriéndose a otra cosa. La estructura en disco para un registro, o página por ese motivo, no contiene ninguna referencia a la hora de la última actualización. Si bien puede encontrar información sobre la última actualización en el nivel de objeto, dicha información no está disponible en el nivel de registro/fila.

+0

Agradezco la respuesta de Damien_The_Unbeliever (y le doy un +1) y de Mark S. Rasmussen. Solo elige la respuesta de Marca porque es lo primero. ¡Gracias! –

10

De Pinal Dave, hay un DMV que puede utilizar para obtener esta información. Es posible que su colega se esté refiriendo al TIMESTAMP para una fila modificada, pero hasta donde sé, solo mantiene que si lo solicita al agregar explícitamente una columna de ese tipo.

SELECT OBJECT_NAME(OBJECT_ID) AS DatabaseName, last_user_update,* 
FROM sys.dm_db_index_usage_stats 
WHERE database_id = DB_ID('AdventureWorks') 
AND OBJECT_ID=OBJECT_ID('test'); 
+0

Entonces me confirma que no hay un "campo oculto en cada registro" –

+0

@Bugeo - No, no * por fila *. Hay 'TIMESTAMP' o' ROWVERSION', pero debes implementarlo tú mismo. Eso registrará una identificación única para la actualización particular hecha a la fila. Aparte de eso, SQL Server solo mantiene una fecha y hora * por tabla * por última vez que se tocó. – Yuck

+1

No es confiable. El primer enlace invalida su uso prácticamente. El segundo tiene algo mejor, tal vez http://sqlblogcasts.com/blogs/grumpyolddba/archive/2010/08/16/sys-dm-db-index-usage-stats-does-it-tell-the-truth.aspx y http://stackoverflow.com/questions/4345603/how-to-find-out-which-tables-are-most-accessed-or-frequently-used-in-sql-server/4345713#4345713 – gbn

7

Si quieres saber cuando una fila específica se actualizó por última vez, se debe mantener una columna de marca de tiempo "LastUpdated" en la tabla y actualizar que tras cada actualización (por ejemplo automáticamente a través del gatillo)

+0

(Aunque es una publicación anterior): tiendo a incluir mis actualizaciones de marca de tiempo como parte de mis declaraciones preparadas (procedimientos almacenados). – Paul

39

Hay ninguna columna oculta, mantenida por fila, que contiene la fecha/hora de la última modificación. Tampoco hay una columna que contenga la identidad del usuario que realizó dicho cambio, ni hay una columna que identifique cuál fue el último cambio realizado (insertar o actualizar).

Si desea alguna de estas características, debe implementarlas. Para algunos usuarios, hasta el último bit de sobrecarga podría importarles, por lo que no sería aceptable tener funciones ocultas (con costos ocultos).

+1

Me gusta especialmente el punto sobre las características ocultas == costo oculto. Este es un concepto que aún no he podido explicar a mis colegas. –

-2

Cuándo se actualizó por última vez un registro, y quién lo actualizó se puede mantener agregando una última columna actualizada con un valor predeterminado de GetDate(). El último nombre de usuario de actualización es complicado, ya que es muy probable que su aplicación esté utilizando una conexión de base de datos común. El nombre de usuario se puede completar agregándolo como una personalización para todos los procedimientos de inserción y actualización y pasando las credenciales de AD, SSO o de inicio de sesión, lo que tenga sentido para su método de autenticación.

La última columna de actualización es tan útil y necesaria que debe incluirse como una opción de conjunto para la base de datos o al menos la tabla. ¿Por qué? Intente obtener esta información sin ella, después de haber ingresado el hecho (sugerencia, si tiene un campo de identidad, "puede" ayudar, pero podría no ser confiable).

+1

Eso registrará la fecha/hora en que se creó el registro, no cuando se modificó – DaveBoltman

Cuestiones relacionadas