Je suis l'aide de Microsoft SQL Server 2005 de la base de données avec le niveau d'isolation READ_COMMITTED
et READ_COMMITTED_SNAPSHOT=ON
.
Maintenant je veux utiliser:
SELECT * FROM <tablename> FOR UPDATE
...alors que d'autres connexions de base de données bloquer lorsque vous essayez d'accéder à la même ligne "mises à JOUR".
J'ai essayé:
SELECT * FROM <tablename> WITH (updlock) WHERE id=1
...mais cela bloque toutes les autres connexions de même pour la sélection d'un id d'autre que "1".
Qui est la bonne astuce pour faire un SELECT FOR UPDATE
comme on le sait pour Oracle, DB2, MySql?
EDIT 2009-10-03:
Ce sont les instructions pour créer la table et l'index:
CREATE TABLE example ( Id BIGINT NOT NULL, TransactionId BIGINT,
Terminal BIGINT, Status SMALLINT );
ALTER TABLE example ADD CONSTRAINT index108 PRIMARY KEY ( Id )
CREATE INDEX I108_FkTerminal ON example ( Terminal )
CREATE INDEX I108_Key ON example ( TransactionId )
Beaucoup de processus en parallèle ce faire, SELECT
:
SELECT * FROM example o WITH (updlock) WHERE o.TransactionId = ?
EDIT 2009-10-05:
Pour une meilleure vue d'ensemble que j'ai écrit tous essayé des solutions dans le tableau suivant:
mécanisme | SELECT sur les différents blocs en ligne | SELECT sur la même ligne de blocs -----------------------+--------------------------------+-------------------------- ROWLOCK | non | non updlock, rowlock | oui | oui xlock,rowlock | oui | oui repeatableread | non | non DBCC TRACEON (1211,-1) | oui | oui rowlock,xlock,holdlock | oui | oui updlock,holdlock | oui | oui UPDLOCK,READPAST | non | non Je suis à la recherche d' | non | oui