如何find当前的交易水平?

如何在SQL Server上查找当前数据库的事务级别?

运行这个:

SELECT CASE transaction_isolation_level WHEN 0 THEN 'Unspecified' WHEN 1 THEN 'ReadUncommitted' WHEN 2 THEN 'ReadCommitted' WHEN 3 THEN 'Repeatable' WHEN 4 THEN 'Serializable' WHEN 5 THEN 'Snapshot' END AS TRANSACTION_ISOLATION_LEVEL FROM sys.dm_exec_sessions where session_id = @@SPID 
 DECLARE @UserOptions TABLE(SetOption varchar(100), Value varchar(100)) DECLARE @IsolationLevel varchar(100) INSERT @UserOptions EXEC('DBCC USEROPTIONS WITH NO_INFOMSGS') SELECT @IsolationLevel = Value FROM @UserOptions WHERE SetOption = 'isolation level' -- Do whatever you want with the variable here... PRINT @IsolationLevel 

只需运行DBCC useroptions ,你会得到这样的东西:

 Set Option Value --------------------------- -------------- textsize 2147483647 language us_english dateformat mdy datefirst 7 lock_timeout -1 quoted_identifier SET arithabort SET ansi_null_dflt_on SET ansi_warnings SET ansi_padding SET ansi_nulls SET concat_null_yields_null SET isolation level read committed 
 SELECT CASE WHEN transaction_isolation_level = 1 THEN 'READ UNCOMMITTED' WHEN transaction_isolation_level = 2 AND is_read_committed_snapshot_on = 1 THEN 'READ COMMITTED SNAPSHOT' WHEN transaction_isolation_level = 2 AND is_read_committed_snapshot_on = 0 THEN 'READ COMMITTED' WHEN transaction_isolation_level = 3 THEN 'REPEATABLE READ' WHEN transaction_isolation_level = 4 THEN 'SERIALIZABLE' WHEN transaction_isolation_level = 5 THEN 'SNAPSHOT' ELSE NULL END AS TRANSACTION_ISOLATION_LEVEL FROM sys.dm_exec_sessions AS s CROSS JOIN sys.databases AS d WHERE session_id = @@SPID AND d.database_id = DB_ID(); 

如果您正在讨论当前的事务嵌套级别,那么您将使用@@TRANCOUNT

如果您正在讨论事务隔离级别,请使用DBCC USEROPTIONS并查找隔离级别的选项。 如果没有设置,它被读取提交