2015-03-31 84 views
-1

如何使用CTE执行多个查询。如何在SQL Server中使用CTE执行多个查询?

with 
CTE1 as select (...) 
, 
CTE2 as select (...) 

insert into table1 from CTE1 
insert into table2 from CTE2 

我收到一个错误Invalid object name CTE2。它看不到我的CTE2。它似乎只执行一个查询。在insert into table1 from CTE1之后,它已经被编程为工作结束。如何强制它移动到代码的下一行。

+1

没有看到完整的代码,看来你可能需要,因为你需要的CTE来使用临时表坚持。 – Taryn 2015-03-31 15:15:21

+4

根据定义,CTE仅存在一个语句。作为一个简单的搜索可能已经表明你... – Andrew 2015-03-31 15:16:01

+0

将安排它像'与CTE1做一些CTE1'和这里可能是一些分隔符,然后'与CTE2做一些CTE2'这样会工作吗? – 2015-03-31 15:25:51

回答

2

你不能这样做使用CTE。

CTE仅在查询范围内可用,并且不能使用一个查询来执行两个insert语句。

在你的情况,我只想做:

insert into table1 select ... /* the select you had in CTE1*/ 
insert into table2 select ... /* the select you had in CTE2*/ 
+0

这是一个复杂的查询,我得到了。不会很容易: -/ – 2015-03-31 15:54:59

4

什么:

with CTE1 as select (...) 
insert into table1 select <cols> from CTE1 
GO 

with CTE2 as select (...) 
insert into table2 select <cols> from CTE2 
GO 
+0

看起来很有前途,但不起作用。它永远工作。它只适用于将它作为单独查询运行的情况(每个查询都写在新窗口或新文件中)。然后一切都很快执行。 – 2015-03-31 15:38:51

+0

我认为您的插入需要从CTE中进行选择。我更新了代码 - 我想你可以选择*,但我更喜欢看到命名列。 – 2015-03-31 16:40:31

+0

我从table1和table2中删除了主键,现在它可以工作:-)我希望PK会有用,但只有障碍。 Mayby我应该在插入之前放下它们并在插入后重新创建它们? – 2015-03-31 16:57:10

相关问题