获取查询结果到表变量

时间:2019-10-18 08:32:07

标签: sql sql-server

所以我在varchar变量中声明了一个查询,例如:

DECLARE @sql VARCHAR(MAX) = 'select * from table'

我还声明了一个与查询的列结构匹配的临时表@Results。

然后我打电话给

INSERT INTO @Results
EXEC (@sql)

我得到的错误是:

  

不能嵌套INSERT EXEC语句。

我还想补充一点,查询没有部分执行得很好

INSERT INTO @Results

可能是什么原因引起的?任何提示将不胜感激

1 个答案:

答案 0 :(得分:1)

最多不能堆叠1个scl enable devtoolset-7 bash && make ,这是SQL Server的限制。

INSERT INTO + EXEC
  

消息8164,级别16,状态1,第4行不能执行INSERT EXEC语句   嵌套。

如果我们删除内部的DECLARE @Test TABLE (Number INT) INSERT INTO @Test (Number) EXEC (' CREATE TABLE #InnerTable (SomeColumn INT); INSERT INTO #InnerTable (SomeColumn) EXEC (''SELECT 1''); SELECT 1;') ...

INSERT INTO + EXEC

成功!


有多种方法可以解决此限制,但是大多数方法都需要修改DECLARE @Test TABLE (Number INT) INSERT INTO @Test (Number) EXEC (' CREATE TABLE #InnerTable (SomeColumn INT); SELECT 1;') 内容。您可以找到详尽的说明here。我通常在过程中使用的是共享一个临时表。您需要在EXEC外部创建一个临时表,然后将其装入内部。该表在EXEC范围之外仍然可以访问,因为它是在外部创建的。

EXEC

该方法的缺点是,如果未创建临时表或使用错误的列名或数据类型创建了临时表,则IF OBJECT_ID('tempdb..#Test') IS NOT NULL DROP TABLE #Test CREATE TABLE #Test (Number INT) EXEC ('INSERT INTO #Test (Number) SELECT 1') SELECT * FROM #Test 部分可能会失败。请记住,这不适用于变量表,它们必须是临时的(至少)才能在EXEC范围内访问。