代码之家  ›  专栏  ›  技术社区  ›  Martin

SQL Server:是否可以从clr udf中调用更新表的存储过程

  •  3
  • Martin  · 技术社区  · 14 年前

    我不知道为什么,但不允许clr用户定义函数更新表。

    是否可以通过从为其更新表的clr udf调用存储过程来解决此限制?

    1 回复  |  直到 14 年前
        1
  •  1
  •   Gennady Vanin Геннадий Ванин Mikael Svenson    14 年前

    它不是clr udf,它是任何 关系数据库管理系统 根据定义,UDF函数不能更改数据库的状态,即啮合:

    • 删除、插入、更新(即DML)语句,
    • 调用存储过程,
    • 永久更改服务器环境变量的值,
    • 等。
      以及使用对非确定性(具有相同输入并返回不同结果)函数(如getDate()、newID()等)的调用。

    更新:
    糟糕的是,SQL Server 2008放宽了对使用非确定性函数的限制。 如果UDF使用非确定性,则将其视为非确定性。

    可以通过以下方式检查:

    SELECT OBJECTPROPERTY(OBJECT_ID('dbo.FunctionName'),'IsDeterministic')