gpt4 book ai didi

.net - SQL Server 2005事务级别和存储过程

转载 作者:行者123 更新时间:2023-12-02 06:22:06 24 4
gpt4 key购买 nike

如果我使用SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED命令,然后在相同的上下文中使用EXEC storedProcedureName执行存储过程,那么该存储过程将使用先前说明的事务级别还是将使用默认事务级别?

如果我想强制每个存储过程都在事务级别使用,是否必须在代码顶部包含相同的语句(SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED)?

PS .:该系统基于.NET 2.0和受限制的第三方专有产品构建,因此需要这些解决方法。

最佳答案

存储过程将在调用时使用有效的事务隔离。

如果存储过程本身设置了显式隔离级别,则在存储过程退出时将重置此级别。

(编辑:刚刚选中,这是contrary to what BOL says“...它会一直为该连接设置,直到它被明确更改为止”,但可以从下面看到)

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

结果
ReadUncomitted
Enter: SetRCTransLevel
Readcomitted
Exit: SetRCTransLevel
ReadUncomitted

关于.net - SQL Server 2005事务级别和存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7507714/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com