2012-03-27 34 views
2

我想我可能会误解为什么使用with命令。但是,任何人都可以看到我做错了什么。 我想做一个查询,并使用结果的两件事情。首先,我想使用这些值将一些插入到另一个表中。然后我想将结果显示给用户。TSQL多用于定义WITH表

所以我有这样的事情。

With temp as (
Select * from Table1 
) 
INSERT INTO Table2 (table1_id) select id from temp 
SELECT * from temp 

我也得到

Error: Invalid object name 'temp'. SQLState: S0002 ErrorCode: 208

这不是什么用的命令是?

回答

5

MSDN

A common table expression (CTE) can be thought of as a temporary result set that is defined within the execution scope of a single SELECT, INSERT, UPDATE, DELETE, or CREATE VIEW statement.

由于insert语句和select声明是两个不同的语句时,CTE是仅适用于insert

作为替代方案,你可以考虑使用OUTPUT clause

WITH temp AS (
    SELECT * FROM Table1 
) 
INSERT INTO Table2 (table1_id) 
OUTPUT inserted.id 
SELECT id FROM temp 
0

有另一种方式来实现你想要做什么。尝试如下。

Select * into #temp_table 
from Table1 

INSERT INTO Table2 (table1_id) select id from #temp_table 
SELECT * from #temp_table