2015-03-31 214 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

相關問題