Vous n'êtes pas sûr du type de verrou SQL Server à utiliser pour la synchronisation

J'ai une application Web ASP.NET qui remplit la table de database SQL Server 2008 comme ceci:

INSERT INTO tblName1 (col1, col2, col3) VALUES(1, 2, 3) 

J'ai aussi une application de service séparée qui traite le contenu de cette table (sur l'arrière-plan) en renommant d'abord cette table, puis en créant une table vide en tant que telle:

 SET XACT_ABORT ON BEGIN TRANSACTION --Rename table EXEC sp_rename 'tblName1', 'temp_tblName1' --Create new table CREATE TABLE tblName1( id INT NOT NULL IDENTITY(1,1) PRIMARY KEY, col1 INT, col2 INT, col3 INT ) COMMIT SET XACT_ABORT OFF --Begin working with the 'temp_tblName1' table 

Ce dont je ne suis pas sûr, c'est quel verrou SQL dois-je utiliser dans cette situation sur la table tblName1 ?

PS. Pour vous donner une fréquence avec laquelle ces deux exemples de code s'exécutent: d'abord peuvent s'exécuter plusieurs fois par seconde (bien que la plupart du time, less fréquemment), et le second – deux fois par jour.

Comme l'ont suggéré certains commentaires, envisagez de le faire différemment. Vous pouvez bénéficier de l'utilisation du niveau d'isolement de l' instantané . L'utilisation de l'isolation d'instantané nécessite que ALLOW_SNAPSHOT_ISOLATION soit défini sur ON dans la database. Ce paramètre est désactivé par défaut, vous devez donc vérifier si vous pouvez l'activer.

Une fois que vous êtes en mesure d'utiliser l'isolation de cliché, vous n'avez pas besoin de modifier votre instruction INSERT , mais votre autre process peut être modifié en quelque chose comme:

 SET XACT_ABORT ON SET TRANSACTION ISOLATION LEVEL SNAPSHOT BEGIN TRANSACTION -- Do whatever this process does, but don't rename the table. -- If you want to get rid of the old records: DELETE [tblName1] WHERE 1 = 1 -- Then COMMIT TRANSACTION 

Si vous avez vraiment besoin de créer une nouvelle table non temporaire pour une raison quelconque, vous devrez peut-être le faire avant d'entrer dans la transaction, car il y a certaines limites à ce que vous êtes autorisé à faire pendant l'isolation des instantanés.