2011-11-24 1 views
0

J'ai des problèmes pour mettre à jour certaines lignes dans SQL Server (2005 et 2008).Comment mettre à jour des tables avec des colonnes nvarchar (max) avec des verrous minimes

Souvent, lorsque j'essaie de mettre à jour une ligne tout en ayant une requête en cours (select * from thistable), je lance la commande de mise à jour et elle échouera en raison d'un problème de délai/verrouillage.

Il n'apparaît que sur les tables avec nvarchar(max)/text colonnes!

Même si j'essaye de SELECT * FROM thistable WITH(ROWLOCK), je rencontre le même problème.

Ma question de base est ici:

Puis-je motiver SQL Server de ne pas bloquer plus de la ligne réelle?

Edit: Je lance le premier SELECT ensuite je tente de METTRE À JOUR ...


Il y a une grande explication sur le verrouillage dans SQL-Serveur on simple talk

+0

@marc_s: pourquoi est-ce que j'obtiens ces verrous en faisant UNE mise à jour? –

+0

@marc_s: vous n'avez donc pas de solution pour moi? –

+0

@marc_s: Je pense que vous n'avez pas compris mon problème. Je ne fais que mettre à jour UNE (1) ligne et je ne peux pas le faire, parce que la sélection ne le permettait pas. Sur les tables sans colonnes de texte, je n'ai aucun problème. –

Répondre

1

Essayez d'utiliser:

SELECT * FROM thistable (NOLOCK) 

pour votre instruction de sélection.

Ensuite, exécutez votre mise à jour comme d'habitude.

+0

va essayer (malheureusement, cela implique de changer le machanism update-command-builder) –

+0

Je vous entends là-bas, c'est une douleur quand vous devez aller à ces longueurs. Nous avions une politique interne à la dernière place où je travaillais où TOUTES les déclarations sélectionnées étaient faites en utilisant NOLOCK, le DBA était autorisé à vous traquer si vous n'aviez pas :-) – shawty

+0

Je ne peux pas vous remercier assez! Je vais essayer d'utiliser un autre serveur SQL la prochaine fois :-(NOLOCK pour les requêtes fait l'affaire (enfin) +1 pour votre DBA (malheureusement) –

Questions connexes