2010-10-18 47 views
3

我不知道为什么,但CLR用户定义函数不允许更新表。SQL Server:可以存储过程,更新表从CLR UDF中调用

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

+0

是否有一个理由,为什么你不能创建一个CLR存储过程,而不是一个功能? – 2010-10-18 07:37:40

+0

我可以将其重写为存储过程,但这需要大量工作。 – Martin 2010-10-18 09:05:16

回答

1

它不是CLR UDF,它是任何 RDBMS UDF功能,通过定义,不能更改数据库的状态,即从事:

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

  • 以及使用调用非确定性(具有相同输入RETURNI NG不同的结果)的功能(如GETDATE(),NEWID()等)

更新:
哎呀,SQL Server 2008中放宽了对使用非确定性函数的限制。 如果UDF使用非确定性,那么它被视为非确定性。

人们可以通过检查:

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

你是对的:如果我试图从一个UDF调用一个存储过程,我会收到一条错误消息,指出只有函数和“...一些扩展存储过程...”可以在UDF中调用。呃 - 回到制图板。 – Martin 2010-10-18 10:19:41