Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server:是否可以从CLR UDF中调用更新表的存储过程_Sql Server_Stored Procedures_User Defined Functions - Fatal编程技术网

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

Sql server SQL Server:是否可以从CLR UDF中调用更新表的存储过程,sql-server,stored-procedures,user-defined-functions,Sql Server,Stored Procedures,User Defined Functions,我不知道为什么,但CLR用户定义函数不允许更新表 是否可以通过从更新表的CLR UDF调用存储过程来绕过此限制?它不是CLR UDF,它是任何RDBMS UDF函数,根据定义,它不能更改数据库的状态,即: 删除、插入、更新(即DML)语句 调用存储过程 永久更改服务器环境变量的值 等等 以及使用对非确定性(相同的输入返回不同的结果)函数(如GETDATE()、NEWID()等)的调用 更新: 面向对象,SQLServer2008放宽了对使用非确定性函数的限制。 如果UDF使用非确定性,则将其

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


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

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

  • 删除、插入、更新(即DML)语句
  • 调用存储过程
  • 永久更改服务器环境变量的值
  • 等等
    以及使用对非确定性(相同的输入返回不同的结果)函数(如GETDATE()、NEWID()等)的调用
更新:
面向对象,SQLServer2008放宽了对使用非确定性函数的限制。 如果UDF使用非确定性,则将其视为非确定性

可以通过以下方式进行检查:

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

您不能创建CLR存储过程而不是函数的原因是什么?我可以将其重写为存储过程,但这需要大量的工作。您是正确的:如果我尝试从UDF调用存储过程,我会收到一条错误消息,指出只有函数和“…一些扩展存储过程…”可以从UDF中调用。呃-回到绘图板上。