Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Atender un solo proceso a la vez

Estas en el tema de Atender un solo proceso a la vez en el foro de SQL Server en Foros del Web. Buenasss, tengo un problema de concurrencia: Tengo una tabla que se llama IdVenta, tiene un solo campo que es también IdVenta. Entonces desde mi sitio, ...
  #1 (permalink)  
Antiguo 12/11/2009, 04:36
 
Fecha de Ingreso: noviembre-2009
Mensajes: 15
Antigüedad: 14 años, 5 meses
Puntos: 0
Atender un solo proceso a la vez

Buenasss, tengo un problema de concurrencia:

Tengo una tabla que se llama IdVenta, tiene un solo campo que es también IdVenta. Entonces desde mi sitio, yo ejecuto un store que te captura el IdVenta para realizar una transaccion y luego le suma uno para que el proximo que venga agarre uno distinto:

CREATE PROCEDURE [dbo].[IdVentaSelect]

AS

SELECT * FROM IdVenta


UPDATE IdVenta
SET IdVenta = IdVenta + 1

Bueno, la cosa es que al ser un sistema concurrente, puede haber dos procesos que llamen al store procedure IdVentaSelect y podría generar conflicto porque ambos obtendrian el mismo Id. ¿Se puede configurar ya sea el store o la tabla, no para que quede inactiva, sino para que atienda un solo proceso a la vez?
es SQL 2005
  #2 (permalink)  
Antiguo 12/11/2009, 08:54
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Respuesta: Atender un solo proceso a la vez

Código:
BEGIN TRANSACTION

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE

UPDATE IdVenta
SET IdVenta = IdVenta + 1


COMMIT TRANSACTION
Saludos!
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #3 (permalink)  
Antiguo 12/11/2009, 09:56
 
Fecha de Ingreso: noviembre-2009
Mensajes: 15
Antigüedad: 14 años, 5 meses
Puntos: 0
Respuesta: Atender un solo proceso a la vez

muchas gracias, ¿como seria el funcionamiento de esto? o sea, si entran dos procesos al mismo tiempo, ejecutaría uno, y pone al otro en espera?

Esto: SET TRANSACTION ISOLATION LEVEL SERIALIZABLE es lo que hace que permita ejecutar el store de a uno por vez?
  #4 (permalink)  
Antiguo 12/11/2009, 10:44
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 19 años, 4 meses
Puntos: 38
Respuesta: Atender un solo proceso a la vez

asi es.. SERIALIZABLE significa en serie, osea de uno en uno...esto enseguida del comando de isolation level..

puedes consultar para mayor referencia, la ayuda de sql server...

Saludos!
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.
  #5 (permalink)  
Antiguo 12/11/2009, 15:15
 
Fecha de Ingreso: noviembre-2009
Mensajes: 15
Antigüedad: 14 años, 5 meses
Puntos: 0
Respuesta: Atender un solo proceso a la vez

Mil gracias, anda perfecto. El Select lo meti también adentro de la transacción, puesto que tiene que devolver el numero también a un solo proceso
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:10.