2010-09-10 2 views
4

Dans SQL Server 2005, est-il possible de définir automatiquement le niveau d'isolation des transactions pour, disons, lire sans engagement et par utilisateur? Par exemple, si je définissais une telle option de connexion pour l'utilisateur Fred, Fred ne devrait pas se souvenir de saupoudrer ses instructions select avec des astuces NOLOCK ou se souvenir d'ajouter une instruction de niveau d'isolation de transaction à son SQL.Dans SQL Server 2005, est-il possible de définir le niveau d'isolation des transactions utilisateur par utilisateur?

+1

Comment les utilisateurs se connecteront? Si je comprends bien votre question, je ne pense pas qu'il y ait moyen de le faire. Si tous les utilisateurs se connectaient via un seul ensemble de code, alors peut-être, mais si vous le souhaitez pour des requêtes ad hoc dans SSMS, etc., alors non. –

+0

Je pensais à définir ceci indépendamment de la façon dont un utilisateur se connectait (donc le paramètre devrait être dans SQL Server lui-même). –

Répondre

2

si elle est pour procs stockées vous pourriez avoir un code comme celui-ci dans les procs

if user_name() in('dbo','username','otherusers','bla') 
set transaction isolation level read uncommitted 
else 
set transaction isolation level read committed 

Mais bien sûr, maintenant que vous avez un problème de maintenance, tous les procs actuels doivent être modifiés

vous pouvez aussi vérifier avec suser_sname() mais cela devient vraiment un grand PITA

vous pourriez aussi être en mesure d'utiliser un LOGON Trigger je ne l'ai pas essayé et je suis pas sûr que cela fonctionnera

+0

Je vais étudier l'option de déclenchement. Pas exactement ce que j'avais espéré, mais ça pourrait faire l'affaire - merci! –

+1

Ewen - une chance avec l'option de déclenchement? J'essaie de faire exactement la même chose que vous, ressemble à. J'ai beaucoup d'activité en lecture seule, et j'aimerais m'assurer qu'ils ne bloquent pas les tables. –

+1

@Tom désolé c'est 2+ ans de retard, mais non, l'option de déclenchement ne fonctionnera pas. Bien sûr, vous pouvez dire 'SET ISOLATION LEVEL' dans le déclencheur, mais comme dans une procédure stockée, il revient à la valeur par défaut lorsque le déclencheur sort de sa portée - il n'est donc utile que pour les requêtes lancées dans le trigger lui-même. Il y a [une discussion plus récente à ce sujet ici] (http://dba.stackexchange.com/questions/47357/can-i-force-a-user-to-use-with-nolock). –

Questions connexes