Поддерживает ли SQL Server Oracle-подобное предложение WITH? - PullRequest
0 голосов
/ 08 июля 2010

Я уже несколько раз упоминал о предложении Oracle WITH для псевдонима подзапроса, подобного этому:

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

Поддерживает ли это какая-либо версия SQL Server? Если нет, есть ли конкретная причина, по которой они этого не делают? Спектакль? Потенциал для неправильного использования?

Ответы [ 2 ]

5 голосов
/ 08 июля 2010

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 должно быть первым ключевым словом в выражении, поэтому вы часто видите его в виде:

;WITH A AS (
)

Что в основном завершает предыдущую инструкцию (точки с запятой в T-SQL являются необязательными)

4 голосов
/ 08 июля 2010

Да, SQL2005 и SQL2008 поддерживают это.Они называются Общими табличными выражениями .

...