2010-07-08 58 views
0

我见过的甲骨文提到与第几次在这里混叠像这样的子查询:SQL Server是否支持类似Oracle的WITH子句?

WITH myData AS (SELECT id, text FROM SomeTable) 
SELECT myData from SomeOtherTable 

是否的SQL Server支持该版本的任何?如果不是,他们有没有特别的原因?性能?不正确使用的可能性?

+4

顺便说一句,请注意,这不像“ANSI-SQL-like”那样“像Oracle一样”。 – 2010-07-08 04:00:43

+0

真的吗?你会碰巧知道在哪里可以找到实际的ANSI-SQL标准的副本吗? – 2010-07-10 19:06:21

回答

5

SQL Server 2005及更高版本。

我想补充一点,你可以叠加这些效果好:

WITH A AS (
    SELECT * FROM X 
), B AS (
    SELECT * FROM A 
), C AS (
    SELECT * FROM B 
) 
SELECT * FROM C 

你甚至可以这样做:

WITH A AS (
), B AS (
) 
SELECT * FROM A INNER JOIN B ON whatever 

也要注意,使用必须在一份声明中第一个关键字,那么你经常看到它写成:

;WITH A AS (
) 

基本上终止前面的语句(分号是k在T-SQL中可选)

+0

酷,不知道这个! – harpo 2010-07-08 03:54:17

4

是的SQL2005和SQL2008都支持这个。他们被称为Common Table Expressions

+0

...和一个可爱的概念,当试图掌握递归CTE时弯曲你的头! – spender 2010-07-08 01:06:48

+0

是的,但实际上,递归CTE并没有那么糟糕,一旦你写了几个。它比替代品好(比如它们)。 – harpo 2010-07-08 03:53:48

相关问题