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命令的用途吗?
来自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)