Estoy haciendo esta pregunta porque de vez en cuando me encuentro con un punto muerto que no entiendo.¿Cuándo un punto muerto no es un punto muerto?
Este es el escenario:
procedimiento almacenado que actualiza la tabla A:
UPDATE A
SET A.Column = @SomeValue
WHERE A.ID = @ID
procedimiento almacenado que se inserta en una tabla temporal #temp:
INSERT INTO #temp (Column1,Column2)
SELECT B.Column1, A.Column2
FROM B
INNER JOIN A
ON A.ID = B.ID
WHERE B.Code IN ('Something','SomethingElse')
veo que no podía posiblemente sea una espera de bloqueo, pero no veo cómo se produciría un punto muerto, ¿me falta algo obvio?
EDIT:
El SP que he escrito aquí son versiones simplificadas, obviamente, pero yo estoy usando las columnas implicadas. La estructura de ambas tablas sería:
CREATE TABLE A (ID IDENTITY
CONSTRAINT PRIMARY KEY,
Column VARCHAR (100))
CREATE TABLE B (ID IDENTITY
CONSTRAINT PRIMARY KEY,
Code VARCHAR (100))
'update' esperando que 'insert into' termine y' insert into' esperando que' update' termine? ¡Ambos esperando que el otro termine! –
Si tanto la Actualización como el Insertar estaban en contra de la misma tabla, a menos que la instrucción Insert intente establecer un bloqueo exclusivo en TODAS las tablas involucradas y no solo en el #temp uno – Gixonita
http://www.codinghorror.com/blog/2008/ 08/deadlocked.html –