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

Откуда:
Сообщений: 333
SQL Server 2012 Express x64

Написал такой вот сиквел:
create table #t (id int);

with cte as
(
    select id
    from #t
)

select * from cte;
select * from cte;


Во втором select'e SQL Server подчеркнул cte и говорит: Invalid object name 'cte'. Вопрос: почему?
17 авг 12, 11:59    [13025517]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по CTE  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5111
читать про with
17 авг 12, 12:02    [13025531]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по CTE  [new]
MrVoid
Member

Откуда:
Сообщений: 333
Дедушка,

WITH common_table_expression (Transact-SQL)
Specifies a temporary named result set, known as a common table expression (CTE). This is derived from a simple query and defined within the execution scope of a single SELECT, INSERT, UPDATE, or DELETE statement.


Ключевое слово - single?
17 авг 12, 12:07    [13025582]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по CTE  [new]
Glory
Member

Откуда:
Сообщений: 104760
MrVoid
Ключевое слово - single?

Если CTE-выражение используется в инструкции, являющейся частью пакета, за инструкцией, стоящей перед ней, должен следовать символ точки с запятой.
17 авг 12, 12:27    [13025779]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по CTE  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
В данном случае имя CTE известно только в инструкции, для которой оно объявлено.
Можно сказать, что инструкция и CTE - это одно целое.
Второй SELECT не имеет никакого отношения к CTE первого.
17 авг 12, 12:32    [13025818]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по CTE  [new]
MrVoid
Member

Откуда:
Сообщений: 333
Glory,

А как это применимо к моему примеру?
17 авг 12, 12:32    [13025822]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по CTE  [new]
Glory
Member

Откуда:
Сообщений: 104760
MrVoid
Glory,

А как это применимо к моему примеру?

Никак. Ошибся
17 авг 12, 12:33    [13025831]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по CTE  [new]
MrVoid
Member

Откуда:
Сообщений: 333
iap,

Огромное спасибо за объяснение! Теперь всё понятно. :)
17 авг 12, 12:40    [13025920]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по CTE  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
MrVoid
iap,

Огромное спасибо за объяснение! Теперь всё понятно. :)
Но у одной инструкции (SELECT, DELETE, INSERT, UPDATE, MERGE)
может быть более одного CTE.
Тогда эти CTE перечисляются через запятую, и имя каждого из них известно во всех последующих CTE этого списка.
17 авг 12, 12:45    [13025962]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по CTE  [new]
MrVoid
Member

Откуда:
Сообщений: 333
iap,

Про объявление нескольких CTE я уже выяснил. Но дело в том, что мне нужна была одна и та же CTE для трёх запросов. Я сделал всё через временную таблицу. :)
17 авг 12, 12:55    [13026072]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по CTE  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
MrVoid, надо избавиться от времянок вообще, и не забывайте использовать вьюшки.
17 авг 12, 18:14    [13028513]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по CTE  [new]
MrVoid
Member

Откуда:
Сообщений: 333
Mnior,

Спасибо за подсказку! Я что-то про вью и не подумал. :)
18 авг 12, 14:30    [13030689]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по CTE  [new]
step_ks
Member

Откуда:
Сообщений: 936
Module-level table expressions
Может, доживем.
18 авг 12, 18:26    [13031063]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по CTE  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
step_ks, что-то мне не кажется это нужным.
Хороший сдерживающий фактор против императивистов и апологетов перенести всё на скуль.
Надо не процедуры развивать, увеличивая сложность кода, а наоборот - представления системы делать более прозрачными.
Формализация - единственный доступный путь.

Хотя я поверхностно прошёлся, буржуйский всётаки. Т.е. открыт к дискуссии.
20 авг 12, 04:17    [13034855]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по CTE  [new]
iap
Member

Откуда: Москва
Сообщений: 47000
Mnior
Хотя я поверхностно прошёлся, буржуйский всётаки. Т.е. открыт к дискуссии.
Фактически, там предлагаются временные VIEW, если я правильно понял.
А-ля "временные таблицы" и "временные процедуры"
20 авг 12, 09:17    [13035071]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по CTE  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
iap, ну я так и понял, но дъявол в деталях и нужно читать между строк, на что учаснеги компашки намекают, каков диагноз и откуда ноги растут. =)
20 авг 12, 17:16    [13038369]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить