sql - 为什么不能在另一个存储过程调用的存储过程中使用 INSERT EXEC 语句?

标签 sql stored-procedures exec user-defined-functions

首先我尝试解释一下情况。 我将过滤器表达式存储在以换行符分隔的一列中。基本想法是这样的:

SELECT  
'SELECT ''' + REPLACE(topic_filter,CHAR(10),''' UNION ALL SELECT ''') + ''''
FROM dbo.topic_filter T
WHERE
  T.id = @id
FOR XML PATH('')

此后,我只需执行该字符串即可将数据放入临时表中。 我的问题从这里开始。 该代码段位于一个存储过程中,并被多个存储过程用来生成要填充的基本源。
方法一:
从另一个 SP 调用此 sp 来填充临时表。
结果1:
INSERT EXEC 语句不能嵌套。 (如果我简单地使用 exec dbo... 风格进行调用,则代码可以正常工作。如果我尝试在存储过程中调用,我只会收到错误消息)

方法 2:
我将上面的代码放入表值函数中。
结果2:
在函数中无效使用副作用运算符“INSERT EXEC”。 (函数本身不编译)

谢谢,
彼得

最佳答案

与此同时,我设法解决了这个问题(在帮助下:))。解决办法很简单:

exec('insert into t2 ' + @str)

其中 @str 包含 select 语句。
我不知道为什么,但这样就没有错误。我调用存储过程的方法:

SET @exec = 'exec dbo.trFilterTopic ''' + @id+ ''',null,null,1'
INSERT INTO #filtered
exec (@exec)

我希望我能抽出一些时间向其他人提供这个解决方案。
再见,
彼得

关于sql - 为什么不能在另一个存储过程调用的存储过程中使用 INSERT EXEC 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3853801/

相关文章:

mysql - 在 MySQL 中连接父/子节点表时出现问题 - 减少结果集

mysql - MySQL 中的聚合函数

c++ - C 系统调用 pipe、fork 和 execl

c++ - 如何通过cpp程序将参数传递给bash脚本

mysql - 将两个字段(相互依赖)关联到另一个表中的同一字段

sql - 导出和导入 Oracle 表时遇到问题

java/java存储过程避免每次从文件系统加载证书

c# - 如何将存储过程的多个结果存储到数据集中?

asp.net - ASP.NET 页面上的 MS SQL 超时,但不在 SSMS 中

java - 在Java中运行bat文件并等待2