2010-09-10 57 views
4

在SQL Server 2005中,是否有可能自动将事务隔离级别设置为比如说每个用户读取未提交的数据? (因此,例如,如果我为用户Fred设置了这样一个登录选项,Fred不必记住用NOLOCK提示来抛出他的select语句,或者记住在他的sql中添加一组事务隔离级别语句。)在SQL Server 2005中,是否可以在每个用户的基础上设置事务隔离级别?

+1

如何将用户所连接?如果我正确理解你的问题,那么我认为没有办法做到这一点。如果所有用户都通过一组代码进行连接,那么也许,但是如果您希望它发生在SSMS中的即席查询等,则不会。 – 2010-09-10 14:52:40

+0

我正在考虑设置这个,无论用户如何连接(所以设置必须在SQL Server本身)。 – 2010-09-10 15:58:26

回答

2

如果是存储的特效,你可以有这样的代码在特效

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

但是,当然,现在你有一个维护问题,目前所有的特效都可以修改

你也可以用suser_sname()检查但是这真的成​​为一个大的PITA

你也许还可以使用LOGON Trigger我还没有尝试过,我不相信这将工作

+0

我会研究触发器选项。不完全是我所希望的,但它可能会诀窍 - 谢谢! – 2010-09-10 15:59:35

+1

Ewen - 触发器选项有什么好运?我正在尝试做同样的事情,听起来像。我有很多只读的活动,并希望确保它们不锁定表。 – 2011-05-30 21:23:32

+1

@Tom对不起,这是迟了2年,但不,触发选项将无法正常工作。当然,你可以在触发器中说'SET ISOLATION LEVEL',但就像它在存储过程中工作一样,当触发器超出范围时它将恢复为默认值 - 所以它只对在登录触发器内运行的查询有用本身。 [这里有一个更近期的讨论](http://dba.stackexchange.com/questions/47357/can-i-force-a-user-to-use-with-nolock)。 – 2013-07-31 16:58:09

相关问题