Sql server TSQL对由WITH定义的表的多次使用

Sql server TSQL对由WITH定义的表的多次使用,sql-server,tsql,with-statement,Sql Server,Tsql,With Statement,我想我可能误解了为什么使用with命令。但是有人能看出我做错了什么吗。 我想做一个查询,并将结果用于两件事。首先,我想使用这些值向另一个表中插入一些内容。然后我想向用户显示结果 所以我有类似的东西 With temp as ( Select * from Table1 ) INSERT INTO Table2 (table1_id) select id from temp SELECT * from temp 我得到 错误:无效的对象名称“temp”。SQLState:S0002 错误代码

我想我可能误解了为什么使用with命令。但是有人能看出我做错了什么吗。 我想做一个查询,并将结果用于两件事。首先,我想使用这些值向另一个表中插入一些内容。然后我想向用户显示结果

所以我有类似的东西

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

错误:无效的对象名称“temp”。SQLState:S0002 错误代码:208

这不是with命令的作用吗?

来自:

公共表表达式(CTE)可以看作是临时的 在单个对象的执行范围内定义的结果集 选择、插入、更新、删除或创建视图语句。

由于
insert
语句和
select
语句是两种不同的语句,因此CTE仅对
insert
有效

作为一种选择,您可以考虑使用A:


有另一种方法可以实现你想做的事情。尝试如下

Select * into #temp_table
from Table1 

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

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