【问题标题】:SQL Server: can a stored proc that updates tables be called from within a CLR UDFSQL Server:可以从 CLR UDF 中调用更新表的存储过程吗
【发布时间】:2011-04-26 19:14:57
【问题描述】:

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

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

【问题讨论】:

  • 为什么不能创建 CLR 存储过程而不是函数?
  • 我可以将其重写为存储过程,但这需要大量工作。

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


【解决方案1】:

它不是 CLR UDF,它是任何 RDBMS UDF 函数,根据定义,不能改变数据库的状态,即参与:

  • DELETE、INSERT、UPDATE(即 DML)语句,
  • 调用存储过程,
  • 永久更改服务器环境变量的值,

  • 以及调用非确定性(相同的输入返回不同的结果)函数(如 GETDATE()、NEWID() 等)

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

可以通过以下方式查看:

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

【讨论】:

  • 您是对的:如果我尝试从 UDF 调用存储过程,我会收到一条错误消息,指出只能调用函数和“...一些扩展存储过程...”从 UDF 中。呃 - 回到绘图板。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-22
  • 2010-10-18
  • 2019-08-19
  • 2016-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多