【问题标题】:Only functions and some extended stored procedures can be executed from within a function只能在函数内执行函数和一些扩展存储过程
【发布时间】:2017-08-06 07:09:54
【问题描述】:

我在 SQL Server 2016 中创建了存储过程和用户​​定义的表值函数。我能够成功编译过程和函数。

过程名称:getAgentLogActivity
函数名称:sp_agent_log_activity

函数正在调用过程 getAgentLogActivity 以及 Exec sp_executesql。因此,当我尝试在函数的选择查询下方运行时,我得到一个错误。

错误:只有函数和一些扩展存储过程可以 从函数中执行。

SELECT * FROM [dbo].[sp_agent_log_activity] 
('2017-02-01 00:00:00','2017-02-01 23:59:59',0,'','','','')

存储过程和函数的完整代码可以在下面的位置找到。

Stored Procedure and User Define Table Valued Function

为了提供代码的背景信息,它是来自 Informix 中 Cisco UCCX 数据库的代码。我已将其转换为 SQL Server。

如果有任何解决该错误的方法,请告诉我。

【问题讨论】:

  • 没有人会从 github 下载你的代码。但是你不能在函数中做你想做的事情。您可以在存储过程中执行此操作,但函数不允许调用过程和执行动态 sql。
  • @SeanLange 说了什么。另外,请查看已经提出(并已回答)的问题:stackoverflow.com/questions/6344880/…
  • 好吧,我不是要求任何人下载代码。只是它是一个非常大的 100 行代码,用于每个过程和函数,所以我把它放在那里。
  • 你真的需要用户定义的函数吗?你能在存储过程中做你想做的事吗?
  • 由于变通办法是不言而喻的,您能否集中您的问题来解释您考虑过哪些明显的变通办法,以及您为什么拒绝它们?

标签: sql-server stored-procedures user-defined-functions table-valued-parameters


【解决方案1】:

最简单的解决方法是将表值函数转换为存储过程。存储过程没有不能执行另一个存储过程的限制。

【讨论】:

  • 所以如果我理解正确,“计算银行帐户校验位”作为具有返回参数的过程比返回 VARCHAR(2) 的函数更好?
猜你喜欢
  • 2020-08-02
  • 2011-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-23
  • 1970-01-01
  • 2016-01-07
相关资源
最近更新 更多