tgr*_*ffo 2 .net t-sql transactions sql-server-2005
如果我使用该命令SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED然后使用EXEC storedProcedureName相同的上下文执行存储过程,那么存储过程是否会使用先前所述的事务级别或将使用默认的事务级别?
如果我想强制每个存储过程在事务级别上使用,我是否必须在代码顶部包含相同的语句(SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED)?
PS.:该系统建立在.NET 2.0和专有第三方产品之上,但有限制,因此需要这些解决方法.
Mar*_*ith 10
存储过程将在调用时使用有效的事务隔离.
如果存储过程本身设置了显式隔离级别,则在存储过程退出时将重置该级别.
(编辑:刚刚检查过,这与BOL所说的相反 "......它仍然为该连接设置,直到明确更改为止"但可以从下面看到)
CREATE PROC CheckTransLevel
AS
DECLARE @Result varchar(20)
SELECT @Result = CASE transaction_isolation_level
WHEN 0 THEN 'Unspecified'
WHEN 1 THEN 'ReadUncomitted'
WHEN 2 THEN 'Readcomitted'
WHEN 3 THEN 'Repeatable'
WHEN 4 THEN 'Serializable'
WHEN 5 THEN 'Snapshot'
END
FROM sys.dm_exec_sessions
WHERE session_id = @@SPID
PRINT @Result
GO
CREATE PROC SetRCTransLevel
AS
PRINT 'Enter: SetRCTransLevel'
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
EXEC CheckTransLevel
PRINT 'Exit: SetRCTransLevel'
GO
SET NOCOUNT ON
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
EXEC CheckTransLevel
EXEC SetRCTransLevel
EXEC CheckTransLevel
Run Code Online (Sandbox Code Playgroud)
结果
ReadUncomitted
Enter: SetRCTransLevel
Readcomitted
Exit: SetRCTransLevel
ReadUncomitted
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1150 次 |
| 最近记录: |