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