【问题标题】:SET TRANSACTION ISOLATION LEVEL within a function在函数中设置事务隔离级别
【发布时间】:2012-04-22 03:19:38
【问题描述】:

当我想添加行时

SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

在 SQL SERVER 2008 中我的函数定义脚本的 BEGIN 子句之后, 它说:

Invalid use of a side-effecting operator 'SET TRANSACTION ISOLATION LEVEL' within a function

如何在函数定义中实现此功能?

【问题讨论】:

    标签: sql sql-server sql-server-2008 select


    【解决方案1】:

    你不能。

    您需要在调用函数的批处理开始时设置此项。

    【讨论】:

      【解决方案2】:

      你不能。 UDFs do not support set operations.

      函数总是在事务的上下文中执行(隐式或显式),一旦事务开始,您就无法更改事务的隔离级别。

      【讨论】:

      • 来自msdn.microsoft.com/en-us/library/ms173763.aspx "有一个例外,您可以在事务期间随时从一种隔离级别切换到另一种。从任何隔离级别切换到 SNAPSHOT 隔离时都会发生异常。这样做会导致事务失败并回滚。但是,您可以将在 SNAPSHOT 隔离中启动的事务更改为任何其他隔离级别。” - 你是对的 - 我错过了。如果 OP 将其取消标记为已接受,我将删除答案
      • 我已经撤回了我的 DV,因为现在它被接受了。也许只是编辑它,所以它是正确的。
      【解决方案3】:

      您是否尝试过解决无法设置事务隔离的问题?

      Select * from dbo.MyTable with (nolock)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-11-20
        • 1970-01-01
        • 2011-12-17
        • 1970-01-01
        • 1970-01-01
        • 2016-01-20
        • 2011-09-30
        相关资源
        最近更新 更多