Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Повторный вызов результата CTE  [new]
2viper2viper
Member

Откуда:
Сообщений: 271
Столкнулся с ситуацией, когда нужно дважды вызвать в запросе результат СТЕ
Но при указании второго select * from cte возникает ошибка на не допустимо имя СТЕ

with cte as (
select * FROM [Data].[dbo].[tb_calendar]
)

select * from cte
select * from cte 


Но почему-то про это не указано в учебниках и BOL
Как можно обойти это ограничение?
(рисуется вариант создать второй такой же запрос с другим названием, через запятую, но как-то не красиво :) )
30 авг 15, 12:40    [18088095]     Ответить | Цитировать Сообщить модератору
 Re: Повторный вызов результата CTE  [new]
2viper2viper
Member

Откуда:
Сообщений: 271
хочу построить конструкцию
decrlare @counts int;

with cte as (
select * FROM [Data].[dbo].[tb_calendar]
)

select@counts = (select count(*) from cte)

IF @counts>0
 BEGIN  
   select * from cte    -- здесь запрос на создание email и заполнение body результатом запроса
 END


То есть, чтобы отправка письма выполнялась только если сте возвращает хоть одно значение
30 авг 15, 12:47    [18088108]     Ответить | Цитировать Сообщить модератору
 Re: Повторный вызов результата CTE  [new]
invm
Member

Откуда: Москва
Сообщений: 9825
2viper2viper
Но почему-то про это не указано в учебниках и BOL
Неужели?
https://msdn.microsoft.com/ru-ru/library/ms175972.aspx
Задается временно именованный результирующий набор, называемый обобщенным табличным выражением (ОТВ). Он извлекается при выполнении простого запроса и определяется в области выполнения одиночной инструкции SELECT, INSERT, UPDATE или DELETE.

2viper2viper
То есть, чтобы отправка письма выполнялась только если сте возвращает хоть одно значение
Для этого не нужно CTE
declare @message_body ...

select
 @message_body = ...
from
 ...

if @@rowcount > 0
 send mail ...
30 авг 15, 14:43    [18088316]     Ответить | Цитировать Сообщить модератору
 Re: Повторный вызов результата CTE  [new]
Mike_za
Member

Откуда: Москва
Сообщений: 1176
1.Перекладывайте во врамянку
2. Запятая то ка бы вам помогла?
3. Ну и в данном простом примере чего ради cte?
30 авг 15, 17:04    [18088579]     Ответить | Цитировать Сообщить модератору
 Re: Повторный вызов результата CTE  [new]
2viper2viper
Member

Откуда:
Сообщений: 271
Mike_za
1.Перекладывайте во врамянку

так и сделаю
Mike_za
2. Запятая то ка бы вам помогла?

не..
Mike_za
3. Ну и в данном простом примере чего ради cte?

потому что реальный запрос построен с использованием двух запросов в СТЕ. Он более сложный чем просто выборка

Спасибо за совет
30 авг 15, 17:47    [18088625]     Ответить | Цитировать Сообщить модератору
 Re: Повторный вызов результата CTE  [new]
2viper2viper
Member

Откуда:
Сообщений: 271
invm
Для этого не нужно CTE
declare @message_body ...

select
 @message_body = ...
from
 ...

if @@rowcount > 0
 send mail ...


Спасибо за вариант
30 авг 15, 17:48    [18088627]     Ответить | Цитировать Сообщить модератору
 Re: Повторный вызов результата CTE  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4893
2viper2viper,

нет тут никакого ограничения, запрос надо правильно написать.

with cte as (
	select 1 AS X 
)
select * from cte a, cte b
31 авг 15, 10:54    [18089961]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить