Хранится ли CTE (как таблица) или вы создаете его каждый раз, когда вам это нужно?(SQL Server 2005) - PullRequest
1 голос
/ 20 июня 2011

Никогда ранее не работал с MS SQL Server, и CTE для меня новость.Но это именно то, что мне нужно в проекте, который я только начал.

Иметь таблицу, которая выглядит как

TABLE group (
 'id' int,
 'parentId' int,
 'groupName' varchar(255)
)

Итак, у меня есть динамическая страница и в зависимости от параметра get "Group" я хочу, чтобы все, что находится ниже этой группы, возвращалось.Я почти уверен, что смогу написать для него CTE и использовать его.

Но я создаю его каждый раз, когда хочу его использовать?(в основном подключитесь к БД, запустите установку для CTE, а затем используйте запрос, выполняющийся на этом).Или они хранятся в базе данных после того, как они созданы и готовы к использованию в любое время?

Если они сохранены, есть ли какая-либо команда, подобная sp_tables и т. Д., Чтобы показать ее / их?Потому что, если они сохранены, вероятно, уже существует запрос, который делает это.

Ответы [ 3 ]

6 голосов
/ 20 июня 2011

CTE - это просто другой способ формирования выражения SQL.

Там, где один комментарий утверждает, что он "не является представлением", он довольно похож на встроенный просмотр. Разница в том, что вы можете ссылаться на него несколько раз в одном запросе или иметь рекурсивные объявления ...

WITH cte AS (...) SELECT * FROM cte

is similar to

SELECT * FROM (...)


Однако они не сохранились. Вы даже не можете сделать следующее ...

WITH
  cte AS
(
  ...
)

SELECT * INTO #temp FROM cte

SELECT * FROM cte

SELECT INTO будет работать, но ко времени второго выбора CTE выходит из области видимости ...

3 голосов
/ 20 июня 2011

CTE оцениваются / создаются / потребляются во время выполнения.Они доступны только для следующего отдельного оператора SQL, который следует после WITH ... SELECT.

Вы можете вставить их набор результатов в переменную таблицы или временную таблицу, чтобы их результаты были доступны в течение более длительного периода времени.

Возможно, вы думаете о представлении.*

2 голосов
/ 20 июня 2011

С MSDN :

Общее табличное выражение (CTE) можно рассматривать как временный набор результатов, который определен в области выполнения отдельногоОператор SELECT, INSERT, UPDATE, DELETE или CREATE VIEW .CTE похож на производную таблицу тем, что он не сохраняется как объект и длится только в течение запроса .В отличие от производной таблицы, CTE может иметь самоссылку и ссылаться на нее несколько раз в одном запросе.

...