web-dev-qa-db-fra.com

T-SQL: verrouiller une table manuellement pendant quelques minutes

Je sais que ce sera étrange, mais je veux déclencher une erreur dans mon application MVC et cette erreur sera basée sur une requête LINQ, où je voudrais obtenir un enregistrement d'une table. Bien que cet enregistrement soit bloqué (base de données/table/ligne) au niveau des commandes T-SQL (par exemple, une boucle infinie mettant toujours à jour cet enregistrement), ma requête LINQ exécutera une requête pour lire cet enregistrement. Lorsque LINQ essaie alors le résultat devrait être un temps mort après 20-30 secondes, quelqu'un a déjà essayé cela?

24
Richárd Baldauf

Si je comprends bien votre question, il semble que vous souhaitiez forcer le verrouillage d'une table à des fins de test. Pour ce faire avec SQL Server, vous pouvez créer et exécuter une procédure stockée qui provoquera un verrou de table exclusif sur la table d'intérêt. Pendant que ce verrou est actif, vous pouvez exécuter le programme que vous souhaitez tester.

La procédure stockée suivante devrait verrouiller votre table pendant 2 minutes. Vous pouvez modifier le paramètre de délai selon vos besoins.

BEGIN TRAN  
SELECT 1 FROM TABLE WITH (TABLOCKX)
WAITFOR DELAY '00:02:00' 
ROLLBACK TRAN   
GO 

Une approche générale pour ce faire a été décrite dans le post stackoverflow ci-dessous. Le lien MSDN fournit des informations supplémentaires sur l'instruction WAITFOR.

Message de stackoverflow d'origine

Publication MSDN supplémentaire

J'espère que ça aide.

68
Marty