我要开始说我很确定这是不可能的。谷歌搜索没有发现任何人问这个问题,所以我悲观地希望。
我正在使用 SqlTransaction 连接到数据库,并在我关闭它之前允许多个消费者使用该事务。是否可以确定事务是否仅用于读取数据或读取/写入数据,即使可能已使用存储过程?是否存在可以检查这一点的某些属性或 SQL 方法(除了执行一些邪恶的差异)?
最佳答案
sys.dm_exec_sessions有一列 writes
。你可以这样查询:
SELECT writes FROM sys.dm_exec_sessions WHERE session_id = @@SPID
不过,这会增加一些开销。我认为 DMV 在运行的 session 数上是 O(N)
。 session 越多,系统的速度就会越慢。最终它变成了负缩放的情况。
请注意,这是每个 session 的值。如果每个 session 有多个事务(每次打开 SqlConnection
对象),将累积跟踪写入。您需要考虑到这一点,或者在其他答案中使用这个想法。
关于c# - 判断 SqlTransaction 是写入数据还是只读,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22488381/