TSQL由WITH定义的表的多种用法

Dan*_*ley 2 t-sql sql-server with-statement

我想我可能会误解为什么使用with命令.但任何人都可以看到我做错了什么.我想进行查询并将结果用于两件事.首先,我想使用这些值来插入另一个表.然后我想向用户显示结果.

所以我有这样的事情.

With temp as (
Select * from Table1 
)
INSERT INTO Table2 (table1_id) select id from temp
SELECT * from temp 
Run Code Online (Sandbox Code Playgroud)

我明白了

错误:无效的对象名称"temp".SQLState:S0002 ErrorCode:208

这不是with命令的用途吗?

Mic*_*son 5

来自MSDN:

公用表表达式(CTE)可以被认为是在单个SELECT,INSERT,UPDATE,DELETE或CREATE VIEW语句的执行范围内定义的临时结果集.

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

作为替代方案,您可以考虑使用一个OUTPUT子句:

WITH temp AS (
    SELECT * FROM Table1 
)
INSERT INTO Table2 (table1_id) 
OUTPUT inserted.id
SELECT id FROM temp
Run Code Online (Sandbox Code Playgroud)