tablas tabla requieren recreación realizado que puedo permite off modificar los integridad impedir identity_insert guardar desactivar datos comprobar cambios cambiar sql sql-server sql-server-2005 transactions

tabla - ¿Cómo comprobar que hay una transacción que aún no se ha confirmado en SQL Server 2005?



no puedo modificar tablas en sql server 2008 (6)

¿Alguien sabe el comando para verificar si hay una transacción no confirmada en SQL Server 2005?


En resumen, hay varios métodos:

  1. SELECCIONA @@ trancount
  2. DBCC OPENTRAN
  3. SELECCIONA XACT_STATE ()
  4. sp_lock
  5. SELECT * FROM sys.dm_tran_active_transactions

correr

DBCC OPENTRAN


sp_who2 sp_lock



XACT_STATE () informa el estado de la transacción de una sesión, indicando si la sesión tiene una transacción activa y si la transacción se puede confirmar o no. Devuelve tres valores:

  • 1, la sesión tiene una transacción activa. La sesión puede realizar cualquier acción, incluida la escritura de datos y la confirmación de la transacción.
  • 0, no hay ninguna transacción activa para la sesión.
  • -1, la sesión tiene una transacción activa, pero se ha producido un error que ha hecho que la transacción se clasifique como una transacción no comprometible. La sesión no puede confirmar la transacción o retroceder a un punto de salvaguarda; Solo puede solicitar una retrotracción completa de la transacción. La sesión no puede realizar ninguna operación de escritura hasta que revierte la transacción. La sesión solo puede realizar operaciones de lectura hasta que revierte la transacción. Una vez que la transacción se ha retrotraído, la sesión puede realizar operaciones de lectura y escritura y puede comenzar una nueva transacción.

@@ TRANCOUNT Devuelve el número de transacciones activas para la conexión actual.

  • 0, no en una transacción
  • 1, en una transacción
  • n, en una transacción anidada

SELECT trans.session_id AS [SESSION ID], ESes.host_name AS [HOST NAME],login_name AS [Login NAME], trans.transaction_id AS [TRANSACTION ID], tas.name AS [TRANSACTION NAME],tas.transaction_begin_time AS [TRANSACTION BEGIN TIME], tds.database_id AS [DATABASE ID],DBs.name AS [DATABASE NAME] FROM sys.dm_tran_active_transactions tas JOIN sys.dm_tran_session_transactions trans ON (trans.transaction_id=tas.transaction_id) LEFT OUTER JOIN sys.dm_tran_database_transactions tds ON (tas.transaction_id = tds.transaction_id ) LEFT OUTER JOIN sys.databases AS DBs ON tds.database_id = DBs.database_id LEFT OUTER JOIN sys.dm_exec_sessions AS ESes ON trans.session_id = ESes.session_id WHERE ESes.session_id IS NOT NULL

--El nombre del DB solo se obtendrá cuando un comando SELECT @@ TRANCOUNT se ejecute. De lo contrario, NULL

ejecute el código anterior ... Le dará los detalles de la sesión en que se produce la transacción.