我想使用带有多个sql select查询的with结构。例如:
;with temptable as ( ... )
select id from temptable
select name from temptable
然而,在第一次选择查询完成后,SQL Server 2008
不允许我这样做,它促使我在第二个查询上方再次编写相同的结构。例如:
;with temptable as ( ... )
select id from temptable
;with temptable as ( ... )
select name from temptable
我尝试在第一个选择查询后使用逗号,但没有用。如何使用SQL Server 2008
中具有结构的查询下的多个选择查询。
答案 0 :(得分:2)
Common table expression仅适用于一个声明。
指定临时命名结果集,称为公用表 表达式(CTE)。这是从简单查询派生而来定义的 在单个 SELECT,INSERT,UPDATE或的执行范围内 DELETE语句。
select id from temptable;
select name from temptable;
是两个语句,因此您无法在第二个查询中使用它。
另一种方法是使用临时表:
SELECT .... INTO #temptable FROM ...; -- your query from CTE
SELECT id FROM #temptable;
SELECT name FROM #temptable;
答案 1 :(得分:0)
CTE only exists for the "duration of the query" you can't use the same CTE in two different SELECT statements as each is a separate query. you need to store the result set of CTE into temp table to and fire multiple select statements on temp table. ;with temptable as ( ... ) select id into #tempResultSet from temptable select name from tempResultSet