FTP | CCD | Buscar | Trucos | Trabajo | Foros |
#1
|
|||
|
|||
transacciones
Hola,
como hago para efectuar una transaccion a nivel de registro (no me bloquee la tabla) desde una conexion ADO sobre un sqlserver? El 'begintrans' me bloquea la tabla a la pimera modificacion. Un Saludo y gracias. |
#2
|
||||
|
||||
Busca información en SQL Server sobre "Isolation Level" y "Locking Hints". Existen modificadores de una sentencia SQL como ROWLOCK (aunque no te puedo dar más info pq no he llegado a utilizarlos).
De todas formas y sin saber más sobre lo que estás programando, yo te diría que no deberías bloquear ni tablas ni registros en un SQL Server (por norma general); Si tienes ésta necesidad es que tal vez no estés realizando las cosas correctamente (ojo, digo por norma general, todo depende de cada caso...) Si nos das más info. tal vez haya otra forma de hacer las cosas sin bloquear.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#3
|
|||
|
|||
Hola,
Gracias por tu respuesta. No es que necesite bloquear, es que tengo ke actualizar dos registros de tablas diferentes en una transaccion (actualizar los dos o ninguno y mostrar error). le echare un vistazo a la documentacion del sqlserver. Un Saludo. |
#4
|
||||
|
||||
Cita:
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#5
|
|||
|
|||
Hola,
Se que eso es lo que hace una transaccion, el problema es que se me bloquea la tabla mientras que la transaccion esta activa. Puedo leer los registros usando NOLOCK en la clausula FROM de la consulta de seleccion, pero lo que me gustaría es poder actualizar otros registros (bloqueo a nivel de fila) mientras la transaccion aun no terminó. El programa ejecuta estas transacciones unas 70 veces por minuto en hilos diferentes, pero no puede actualizar un registro hasta que termina la transaccion anterior..... ese es el problema (la transaccion queda en cola esperando que finalize la anterior). Supuestamente con la Clausula WITH (ROWLOCK) deberia bloquear solo los registros utilizados en la consulta de actualizacion, pero me bloquea la tabla completa para escritura. Es decir si ejecuto:
y sin finalizar la transaccion ejecuto:
Siendo IDAA clave primaria, la segunda consulta no se ejcuta mientras no haga un commit o un rollback de la primera transaccion. ¿Alguna Sugerencia? Un Saludo. Última edición por Alessan fecha: 20-09-2004 a las 17:19:11. |
#6
|
||||
|
||||
Hola.
Lamentablemente mi experiencia es muy mala con los bloqueos de SQL Server. Por más que la documentación de SQL Server 7 indicaba que los bloqueos són a nivel de registro, a mi también me quedaba totalmente bloqueada la tabla. Siempre sospeché que los culpables eran los bloqueos de índice que tambien se generan (como puedes comprobar en el Administrador Corporativo, en Administración, Actividad Actual). Debido a estos problemas, abandoné practicamente la utilización de transacciones en SQL Server (usandolas solo en los casos más imprescindibles, y intentando que fueran cuanto más cortas mejor). Pasándome finalmente a Interbase (Firebird en concreto) que maneja esplendidamente las transacciones. Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no). Última edición por guillotmarc fecha: 20-09-2004 a las 17:26:15. |
|
|
|