FROM Цена1);
Данный код, обеспечивает тот же запрос, что и предыдущий, но вместо представления в нем используются производные таблицы. Хотя производные таблицы доступны только в рамках оператора, в котором они существуют, в общем случае таблицы усложняют прочтение и, вследствие этого, обслуживание запроса. Эта проблема умножается, если производную таблицу (как в нашем примере) требуется использовать многократно в пределах одного и того же пакета, поскольку для повторного использования производную таблицу потребуется копировать и вставлять.
В такой ситуации прекрасно подходит выражение CTE, поскольку оно обеспечивает большую удобочитаемость T-SQL (подобно представлению), но все-таки может использоваться более одного раза в запросе, непосредственно следующим за ним в этом же пакете. Безусловно, это невозможно за пределами указанной сферы действия. Кроме этого, CTE является конструкцией уровня языка — это означает, что SQL Server не создает внутренних временных или виртуальных таблиц. Запрос, лежащий в основе выражения CTE, можно вызывать каждый раз, когда на него появляется ссылка в следующем непосредственно за ним запросе.
Следовательно, эту же ситуацию можно описать с помощью выражения
WITH
Цена_СТЕ (Блюдо, Стоимость)
AS
(SELECT b.Блюдо, SUM (s.Вес*n.Цена/1000)+b.Труд as Стоимость
FROM (Блюда b JOIN Состав s ON b.ID_блюда = s.Блюдо )
JOIN Наличие n ON s.Продукт = n.Продукт