使用结构 - 使用多个选择查询而不重复“with”

时间:2016-04-05 17:18:29

标签: sql sql-server sql-server-2008 tsql

我想使用带有多个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中具有结构的查询下的多个选择查询。

2 个答案:

答案 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