如何在CTE中简洁地指定“文字”表格?

时间:2016-09-22 18:57:43

标签: sql-server common-table-expression literals

在MS SQL Server 2008及更高版本中,可以使用values作为子查询指定“文字”表:

select * from (
  values (1,2),
         (3,4)
  ) as foo(bar,baz)

但是,我还没有想出一个合理的方法在with子句(CTE)中指定它。

我希望以下内容能够正常工作,因为它在程序员友好的PostgreSQL中运行得很好......但它给SQL Server带来了语法错误:

with foo(bar,baz) as (
  values (1,2),
         (3,4)
  )
select * from foo;

这种替代形式可以正常工作,但似乎过于冗余且容易出错:

with foo as (
  select * from (
  values (1,2),
         (3,4)
  ) as foo(bar, baz)
)
select * from foo;

在SQL Server中,是否有更简洁的方法在CTE中指定文字表?

1 个答案:

答案 0 :(得分:0)

with foo as (select 1 as bar, 2 as baz 
             union all 
             select 3, 4) 
select * from foo;