【发布时间】:2021-10-01 15:25:06
【问题描述】:
我有一个用户定义的表类型tyAnalysisNumbers。我需要使用 SELECT 语句在存储过程中填充我的用户定义数据类型,我正在努力让它在我的存储过程中工作。
我尝试过的以下方法不起作用
DECLARE @MyTable tyAnalysisNumbers;
INSERT INTO @MyTable
EXEC ('SELECT * FROM ' + @someTable);
我收到此错误:
INSERT EXEC 语句不能嵌套
我不确定如何通过 select 语句插入到我的自定义表中。
谁能帮我完成这个?
【问题讨论】:
-
这通常应该有效,因此您的脚本中没有包含更多内容。在您的问题中添加一个完整的示例来重现错误。
-
我有两个存储过程,一个调用一个子进程的父进程。我正在工作的子 sp 使用用户定义的表,按原样工作,你是对的。但它必须从我们应用程序的父存储过程中调用,它有以下几行被触发 - ``` INSERT INTO @resultsTable execute childStoredProcedure Commit Transaction SELECT * FROM @resultsTable End Try Begin Catch If XACT_STATE() 0 ``` 此时错误被记录到 debugEvents,这就是我看到错误
An INSERT EXEC statement cannot be nested的地方。 -
什么是
@someTable?永久表的名称?在代码前面声明的表变量? TVP? -
@someTable 是模式和表名,是永久的,不是临时的。
-
这就是嵌套存储过程的全部功能吗?将某个表的输出插入到表类型中,然后选择它?为什么要打扰表格类型?如果在最终选择之前发生了其他事情,请包含该信息并且不要隐藏它或让它变得愚蠢。解决方案可能是只在动态 SQL 范围内执行所有操作(或者,如果在填充类型后执行的操作集很大和/或
@someTable可能性的列表很小,则可能有其他解决方案)。
标签: sql sql-server sql-server-2016