Ver Mensaje Individual
  #2 (permalink)  
Antiguo 23/09/2007, 18:52
monkyta
 
Fecha de Ingreso: noviembre-2005
Mensajes: 658
Antigüedad: 18 años, 6 meses
Puntos: 3
Re: Concurrencia en sql server

Esto lo conteste en otro foro; pero aca lo explico de nuevo para que todos los que no tienen claro esto que es por lo demas muy complejo, se hagan de una idea

El control de la concurrencia se programa usando las transacciones SQL; las cuales son una o varias sentencias sql que se ejecutan como una sola LUW (unidad logica de trabajo)
El control de transacciones concurrentes en una base de datos brinda un eficiente desempeño en un Motor de Datos, puesto que permite controlar la ejecución de transacciones que operan en paralelo, accesando a información compartida y, por lo tanto, interfiriendo potencialmente unas con otras...
Junto con la programacion transaccional es recomendable a veces cambiar el bloqueo (tipo de acceso que se permite a un elemento) .... el defecto es nivel de pagina ; por lo que cambiarlo a nivel de Row ayudaria bastante (esto ultimo depende del motor que estas usando; ya que no todos permiten a nivel de fila).
Ahora voy a poner un ejemplo de una transaccion en un procedimiento almacenado para que se hagan de una idea de que significa trabajar con aplicaciones sql que manejen la concurrencia...
la clave es el BEGIN TRAN ... COMMIT o ROLLBACK END TRAN

create procedure spa_adp_eli_anotaciones (
@cd_empresa smallint,
@id_proyecto int,
@fc_anotacion datetime)
AS
BEGIN TRAN

declare @error int,
@msg varchar(255)

-- Elimina Anotacion

delete from SGC_ANOTACIONES
where cd_empresa = @cd_empresa
and id_proyecto = @id_proyecto
and fc_anotacion = @fc_anotacion

select @error=@@error

if @error != 0
begin
select @msg = "*** ERROR AL ELIMINAR ANOTACION ***"
goto fin
end


-- Commit de transaccion

commit tran
select 0 RETORNO, @msg MSG
return


-- Subrutinas
fin:
rollback tran
select -1 RETORNO, @msg MSG
return
go

Espero les ayude

En el ejemplo puse solo un delete; pero la idea es agrupar varias sentencias que pueden ser select, insert, delete, etc... y siempre controlando el exito o fracaso de ellas .. si todo exitoso entonces se hace COMMIT que indica que se grabara la información en las tablas; si falla ROLLBACK y devuelve todo ... con esto se logra el control perfecto de la integridad que es muy pero muy importante

Saludos