2010-07-08 101 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