SQL Server:可以从CLR UDF中调用更新表的存储过程

时间:2010-10-18 06:42:14

标签: sql-server stored-procedures user-defined-functions

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

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

1 个答案:

答案 0 :(得分:1)

它不是CLR UDF,它是任何 RDBMS UDF函数,顾名思义,不能改变数据库的状态,即搞:

  • DELETE,INSERT,UPDATE(即DML)语句,
  • 调用存储过程
  • 永久更改服务器环境变量的值
  • 等。
    以及使用对不确定性的调用(使用相同的输入返回不同的结果)函数(如GETDATE(),NEWID()等)。

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

可以通过以下方式检查:

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