Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.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的函数中使用过程?_Sql Server - Fatal编程技术网

Sql server 为什么可以';我是否在SQL Server的函数中使用过程?

Sql server 为什么可以';我是否在SQL Server的函数中使用过程?,sql-server,Sql Server,我知道函数总是返回一个值,我将创建一个sp,它在函数返回时返回一个值,并希望在函数内部调用它。我该怎么做呢?在您发表上述评论后,我有一些想法 通常,存储过程几乎可以做任何事情。因此,更安全的做法是不允许他们这样做 引擎无法可靠地计算出存储过程的功能 那么存储过程的嵌套、递归、链接服务器调用或OPENQUERY调用以及其他许多事情呢 如果以后有人修改它来写东西呢 不能将UDF模式绑定到存储过程 这就是SQL Server的行为方式,有充分的理由您不能在函数中调用SQL存储过程。因为,根据MS

我知道函数总是返回一个值,我将创建一个sp,它在函数返回时返回一个值,并希望在函数内部调用它。我该怎么做呢?

在您发表上述评论后,我有一些想法

  • 通常,存储过程几乎可以做任何事情。因此,更安全的做法是不允许他们这样做

  • 引擎无法可靠地计算出存储过程的功能
    那么存储过程的嵌套、递归、链接服务器调用或OPENQUERY调用以及其他许多事情呢

  • 如果以后有人修改它来写东西呢
    不能将UDF模式绑定到存储过程


这就是SQL Server的行为方式,有充分的理由

您不能在函数中调用SQL存储过程。因为,根据MSDN:用户定义的函数不能用于执行修改数据库状态的操作。-调用存储过程很可能会修改数据库状态,因此在函数中不允许这样做。@Andomar:我知道,但为什么我们不能调用任何特定的原因。@marc_s:但在函数中,我只执行select命令。而且它不会修改数据库状态。现在在这个select场景中,为什么不呢?是的,在您的情况下,可能是这样的-但是SQL Server不能假定所有存储过程永远不会更改数据库状态。因为不能假设这一点,所以不能在函数中使用存储过程。如果它真的只是一个简单的选择-只需将该选择复制到您的函数中…好的。。数据库巨头并没有提供调用函数内部存储过程的功能,只是为了避免过程中的更改。。??但是,我不这么认为。。他们应该是其他原因@PrashantGupta:我给出了不止一个理由:阅读我的完整答案。现在,处理好它,不要忽视所有花时间回答/评论的人。Hey@gbn:我同意你的回答,我不会忽视任何人,也非常感谢所有发表评论/评论的人。但如果你不想澄清,我可以。。我必须找到更好的方法来得到我的答案,因为到目前为止我对ans还不满意。请告诉我我在交叉问题上犯了错误的地方是什么?