Problemas con transacciones

22/07/2003 - 01:12 por Mario | Informe spam
Quisiera saber si existe un comando en SQL Server para
realizar lo siguiente:

Tengo 2 client que quieren consultar al mismo registro
Un cliente actualiza un campo. Por ejemplo de "A" a "B".
Sin antes que termine la transacción el otro cliente lee
el registro como "B"

Que puedo hacer para que el segundo cliente lea el campo
com "A" sin tener que bloquearlo y sin tener que terminar
la transaccion.

Ejemplo:
Primer Cliente:

BEGIN TRAN
UPDATE CUSTOMERS SET ADDRESS = 'Hidalgo Street'
WHERE CUSTOMERID = 'ALFKI'


Second Client:
SELECT * FROM CUSTOMERS WHERE CUSTOMERID = 'ALFKI'

El puede ver en el campo dirección:
Obere Str. 57

Y yo quiero que vea
Hidalgo Street

Espero su respuesta
Gracias

Preguntas similare

Leer las respuestas

#1 Carlos Sacristan
22/07/2003 - 07:56 | Informe spam
En el segundo cliente tendrás que indicar que no quieres usar bloqueos,
algo como:

SELECT * FROM CUSTOMERS WITH (NOLOCK) WHERE CUSTOMERID = 'ALFKI'

Espero que sepas lo que supone leer un registro que aún no ha sido
confirmado...



Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)

Por favor, responder únicamente al foro

(Guía de netiquette del foro)
http://www.helpdna.net/bosqlfaq00.htm
http://perso.wanadoo.es/rubenvigon/foro

(FAQ's de SQL Server)
http://support.microsoft.com/defaul.../70faq.asp
http://www.helpdna.net/bosqlfaq.htm

"Mario" escribió en el mensaje
news:03c201c34fdd$8f5ded10$
Quisiera saber si existe un comando en SQL Server para
realizar lo siguiente:

Tengo 2 client que quieren consultar al mismo registro
Un cliente actualiza un campo. Por ejemplo de "A" a "B".
Sin antes que termine la transacción el otro cliente lee
el registro como "B"

Que puedo hacer para que el segundo cliente lea el campo
com "A" sin tener que bloquearlo y sin tener que terminar
la transaccion.

Ejemplo:
Primer Cliente:

BEGIN TRAN
UPDATE CUSTOMERS SET ADDRESS = 'Hidalgo Street'
WHERE CUSTOMERID = 'ALFKI'


Second Client:
SELECT * FROM CUSTOMERS WHERE CUSTOMERID = 'ALFKI'

El puede ver en el campo dirección:
Obere Str. 57

Y yo quiero que vea
Hidalgo Street

Espero su respuesta
Gracias
Respuesta Responder a este mensaje
#2 Miguel Egea
22/07/2003 - 08:28 | Informe spam
En realidad Mario, el segundo cliente no podrá ver nada con el nivel de
aislamiento por defecto, quedará bloqueado en esperade que el primero
termine la transacción.
En lo personal a mí me parece la mejor opción, ¿acaso estás teniendo muchos
problemas de concurrencia? ¿no estarás esperando entradas del usuario (que
pulse una tecla o algo así) dentro de transacciones?

Espero que te sirva.

Saludos
Miguel Egea
http://www.portalsql.com
Sql-Server MVP
"Mario" escribió en el mensaje
news:03c201c34fdd$8f5ded10$
Quisiera saber si existe un comando en SQL Server para
realizar lo siguiente:

Tengo 2 client que quieren consultar al mismo registro
Un cliente actualiza un campo. Por ejemplo de "A" a "B".
Sin antes que termine la transacción el otro cliente lee
el registro como "B"

Que puedo hacer para que el segundo cliente lea el campo
com "A" sin tener que bloquearlo y sin tener que terminar
la transaccion.

Ejemplo:
Primer Cliente:

BEGIN TRAN
UPDATE CUSTOMERS SET ADDRESS = 'Hidalgo Street'
WHERE CUSTOMERID = 'ALFKI'


Second Client:
SELECT * FROM CUSTOMERS WHERE CUSTOMERID = 'ALFKI'

El puede ver en el campo dirección:
Obere Str. 57

Y yo quiero que vea
Hidalgo Street

Espero su respuesta
Gracias
Respuesta Responder a este mensaje
#3 Mario
22/07/2003 - 17:00 | Informe spam
Que tal me han dado varios tips por ejemplo:

SELECT * FROM CUSTOMERS WITH (NOLOCK) WHERE CUSTOMERID
= 'ALFKI'

ó

SELECT * FROM CUSTOMERS WITH(READUNCOMMITTED) WHERE
CUSTOMERID = 'ALFKI'

Pero con estas instrucciones sigo viendo el valor
actualizado que hizo el primer cliente.

Y yo quiero que este segundo cliente vea el valor
original, hasta que no haga commit el primer cliente.

Que puedo hacer

Gracias



En realidad Mario, el segundo cliente no podrá ver nada


con el nivel de
aislamiento por defecto, quedará bloqueado en esperade


que el primero
termine la transacción.
En lo personal a mí me parece la mejor opción, ¿acaso


estás teniendo muchos
problemas de concurrencia? ¿no estarás esperando entradas


del usuario (que
pulse una tecla o algo así) dentro de transacciones?

Espero que te sirva.

Saludos
Miguel Egea
http://www.portalsql.com
Sql-Server MVP
"Mario" escribió en el mensaje
news:03c201c34fdd$8f5ded10$
Quisiera saber si existe un comando en SQL Server para
realizar lo siguiente:

Tengo 2 client que quieren consultar al mismo registro
Un cliente actualiza un campo. Por ejemplo de "A" a "B".
Sin antes que termine la transacción el otro cliente lee
el registro como "B"

Que puedo hacer para que el segundo cliente lea el campo
com "A" sin tener que bloquearlo y sin tener que terminar
la transaccion.

Ejemplo:
Primer Cliente:

BEGIN TRAN
UPDATE CUSTOMERS SET ADDRESS = 'Hidalgo Street'
WHERE CUSTOMERID = 'ALFKI'


Second Client:
SELECT * FROM CUSTOMERS WHERE CUSTOMERID = 'ALFKI'

El puede ver en el campo dirección:
Obere Str. 57

Y yo quiero que vea
Hidalgo Street

Espero su respuesta
Gracias




.

Respuesta Responder a este mensaje
#4 Miguel Egea
23/07/2003 - 08:24 | Informe spam
Usar bloqueo optimista y que el primer cliente no cambie nada hasta que sea
definitivo. De esta forma tu segundo cliente si llega en el momento del
cambio, tendrá que esperar y verá el nuevo valor.

Espero que te sirva.

Saludos
Miguel Egea
http://www.portalsql.com
Sql-Server MVP
"Mario" escribió en el mensaje
news:00b801c35061$f38475a0$
Que tal me han dado varios tips por ejemplo:

SELECT * FROM CUSTOMERS WITH (NOLOCK) WHERE CUSTOMERID
= 'ALFKI'

ó

SELECT * FROM CUSTOMERS WITH(READUNCOMMITTED) WHERE
CUSTOMERID = 'ALFKI'

Pero con estas instrucciones sigo viendo el valor
actualizado que hizo el primer cliente.

Y yo quiero que este segundo cliente vea el valor
original, hasta que no haga commit el primer cliente.

Que puedo hacer

Gracias



En realidad Mario, el segundo cliente no podrá ver nada


con el nivel de
aislamiento por defecto, quedará bloqueado en esperade


que el primero
termine la transacción.
En lo personal a mí me parece la mejor opción, ¿acaso


estás teniendo muchos
problemas de concurrencia? ¿no estarás esperando entradas


del usuario (que
pulse una tecla o algo así) dentro de transacciones?

Espero que te sirva.

Saludos
Miguel Egea
http://www.portalsql.com
Sql-Server MVP
"Mario" escribió en el mensaje
news:03c201c34fdd$8f5ded10$
Quisiera saber si existe un comando en SQL Server para
realizar lo siguiente:

Tengo 2 client que quieren consultar al mismo registro
Un cliente actualiza un campo. Por ejemplo de "A" a "B".
Sin antes que termine la transacción el otro cliente lee
el registro como "B"

Que puedo hacer para que el segundo cliente lea el campo
com "A" sin tener que bloquearlo y sin tener que terminar
la transaccion.

Ejemplo:
Primer Cliente:

BEGIN TRAN
UPDATE CUSTOMERS SET ADDRESS = 'Hidalgo Street'
WHERE CUSTOMERID = 'ALFKI'


Second Client:
SELECT * FROM CUSTOMERS WHERE CUSTOMERID = 'ALFKI'

El puede ver en el campo dirección:
Obere Str. 57

Y yo quiero que vea
Hidalgo Street

Espero su respuesta
Gracias




.

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida