SQL Server是否支持类似Oracle的子句?

Ste*_*ins 0 sql t-sql sql-server oracle common-table-expression

我已经看到过几次提到Oracle WITH子句来为这样的子查询别名:

WITH myData AS (SELECT id, text FROM SomeTable)
SELECT myData from SomeOtherTable
Run Code Online (Sandbox Code Playgroud)

是否有任何版本的SQL Server支持此功能?如果没有,他们有没有特别的理由?性能?错误使用的可能性?

Cad*_*oux 5

SQL Server 2005及以上版本.

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

WITH A AS (
    SELECT * FROM X
), B AS (
    SELECT * FROM A
), C AS (
    SELECT * FROM B
)
SELECT * FROM C
Run Code Online (Sandbox Code Playgroud)

你甚至可以这样做:

WITH A AS (
), B AS (
)
SELECT * FROM A INNER JOIN B ON whatever
Run Code Online (Sandbox Code Playgroud)

另请注意,WITH必须是语句中的第一个关键字,因此您经常将其视为:

;WITH A AS (
)
Run Code Online (Sandbox Code Playgroud)

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