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

Откуда:
Сообщений: 202
пипл,
есть запрос вида

declare @v1 .. , @v2 ..;
;with CTE as (select.. from..)

select @v1 = .., @v2 = .. from CTE

select * from CTE

почему выдает ошибку Invalid object name 'CTE' ?

по определению я могу использовать CTE в запросе(в одном батче) когда захочу.
15 июл 11, 14:44    [10980262]     Ответить | Цитировать Сообщить модератору
 Re: Поясните CTE  [new]
Crimean
Member

Откуда:
Сообщений: 13147
declare @v1 int
;
with CTE as (select top 1 id from sysobjects)
select @v1 = id from CTE

select @v1

а ругается на вторую вычитку из ЦТЕ. оно для второго стейтмента уже не определено
15 июл 11, 14:48    [10980304]     Ответить | Цитировать Сообщить модератору
 Re: Поясните CTE  [new]
baracs
Member

Откуда: Москва
Сообщений: 7217
BOL
...определяется в области выполнения одиночной инструкции SELECT, INSERT, UPDATE, MERGE или DELETE
?
15 июл 11, 14:50    [10980317]     Ответить | Цитировать Сообщить модератору
 Re: Поясните CTE  [new]
yado4eg
Member

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

BOL
Он извлекается при выполнении простого запроса и определяется в области выполнения одиночной инструкции SELECT


это печальна. пасиб.
15 июл 11, 14:52    [10980340]     Ответить | Цитировать Сообщить модератору
 Re: Поясните CTE  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Гм...

declare @v1 .. , @v2 ..;
;with CTE as (select.. from..)

select @v1 = .., @v2 = .. from CTE

select @v1 .., @v2 .. 


Сообщение было отредактировано: 15 июл 11, 14:57
15 июл 11, 14:57    [10980384]     Ответить | Цитировать Сообщить модератору
 Re: Поясните CTE  [new]
yado4eg
Member

Откуда:
Сообщений: 202
pkarklin
Гм...

declare @v1 .. , @v2 ..;
;with CTE as (select.. from..)

select @v1 = .., @v2 = .. from CTE

select @v1 .., @v2 .. 


такой вариант да, но мне хотелось использовать уже готовую выборку(CTE) еще раз.
а так прейдеться еще раз дублировать кусок кода, ну или оформлять табличную функцию, что в данном случае мне не нужно.
15 июл 11, 15:01    [10980407]     Ответить | Цитировать Сообщить модератору
 Re: Поясните CTE  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
yado4eg
такой вариант да, но мне хотелось использовать уже готовую выборку(CTE) еще раз.


Тогда забейте на CTE и сохарните результат выборки в табличной переменной.
15 июл 11, 15:03    [10980421]     Ответить | Цитировать Сообщить модератору
 Re: Поясните CTE  [new]
Crimean
Member

Откуда:
Сообщений: 13147
union (ALL) оч часто спасает в таких случаях :)
15 июл 11, 15:03    [10980424]     Ответить | Цитировать Сообщить модератору
 Re: Поясните CTE  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
Crimean
union (ALL) оч часто спасает в таких случаях :)
Так всё равно же в одной инструкции
нельзя присвоить значения полей переменным и получить рекордсет.
UNION в этом не поможет.
15 июл 11, 15:06    [10980452]     Ответить | Цитировать Сообщить модератору
 Re: Поясните CTE  [new]
yado4eg
Member

Откуда:
Сообщений: 202
Crimean
union (ALL) оч часто спасает в таких случаях :)

не понял к чему ..

pkarklin
Тогда забейте на CTE и сохарните результат выборки в табличной переменной.


офф топ .

в скалярных функциях можно использовать временные таблицы ?

зы. ms server 2005
15 июл 11, 15:07    [10980459]     Ответить | Цитировать Сообщить модератору
 Re: Поясните CTE  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
iap
Crimean
union (ALL) оч часто спасает в таких случаях :)
Так всё равно же в одной инструкции
нельзя присвоить значения полей переменным и получить рекордсет.
UNION в этом не поможет.
Зато можно вставить результат запроса в табличную переменную
и получить рекордсет с помощью кляузы OUTPUT
SET NOCOUNT ON;

DECLARE @T TABLE(ID INT NOT NULL IDENTITY, X INT);
WITH CTE(X)AS(SELECT 22)
INSERT @T(X)
OUTPUT inserted.*
SELECT X
FROM CTE;

SELECT * FROM @T;
15 июл 11, 15:11    [10980488]     Ответить | Цитировать Сообщить модератору
 Re: Поясните CTE  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

> в скалярных функциях можно использовать временные таблицы ?

можно табличные переменные.

Posted via ActualForum NNTP Server 1.4

15 июл 11, 15:13    [10980498]     Ответить | Цитировать Сообщить модератору
 Re: Поясните CTE  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
yado4eg,

Я говорил о табличных переменных.
15 июл 11, 15:22    [10980571]     Ответить | Цитировать Сообщить модератору
 Re: Поясните CTE  [new]
yado4eg
Member

Откуда:
Сообщений: 202
жаль но табличный переменных нет.
15 июл 11, 15:39    [10980763]     Ответить | Цитировать Сообщить модератору
 Re: Поясните CTE  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

> жаль но табличный переменных нет.

а?

Posted via ActualForum NNTP Server 1.4

15 июл 11, 16:07    [10980998]     Ответить | Цитировать Сообщить модератору
 Re: Поясните CTE  [new]
yado4eg
Member

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

yado4eg

pkarklin
Тогда забейте на CTE и сохарните результат выборки в табличной переменной.


в скалярных функциях можно использовать временные таблицы ?

зы. ms server 2005


или все таки можно использовать ? :)
15 июл 11, 16:20    [10981115]     Ответить | Цитировать Сообщить модератору
 Re: Поясните CTE  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

> или все таки можно использовать ? :)

временные таблицы - нельзя. можно табличные переменные.
что, интересно, означала фраза

> жаль но табличный переменных нет.

?

Posted via ActualForum NNTP Server 1.4

15 июл 11, 16:23    [10981140]     Ответить | Цитировать Сообщить модератору
 Re: Поясните CTE  [new]
baracs
Member

Откуда: Москва
Сообщений: 7217
yado4eg
жаль но табличный переменных нет.
Ну так, объявить надо...
15 июл 11, 16:28    [10981164]     Ответить | Цитировать Сообщить модератору
 Re: Поясните CTE  [new]
yado4eg
Member

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

> жаль но табличный переменных нет. в ms server 2005.
или я чего-то не знаю ?
15 июл 11, 16:29    [10981169]     Ответить | Цитировать Сообщить модератору
 Re: Поясните CTE  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
yado4eg
daw,

> жаль но табличный переменных нет. в ms server 2005.
или я чего-то не знаю ?
Вы чего-то не знаете.
15 июл 11, 16:29    [10981175]     Ответить | Цитировать Сообщить модератору
 Re: Поясните CTE  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

> в ms server 2005.
> или я чего-то не знаю ?

вообще-то, начиная аж с 2000-ого есть.

Posted via ActualForum NNTP Server 1.4

15 июл 11, 16:30    [10981180]     Ответить | Цитировать Сообщить модератору
 Re: Поясните CTE  [new]
yado4eg
Member

Откуда:
Сообщений: 202
Гавриленко Сергей Алексеевич,

ну как всегда :)

так вопрос стал очень остро!
дайте линк
15 июл 11, 16:31    [10981187]     Ответить | Цитировать Сообщить модератору
 Re: Поясните CTE  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381

> дайте линк

http://msdn.microsoft.com/en-us/library/ms175010(v=SQL.90).aspx

Posted via ActualForum NNTP Server 1.4

15 июл 11, 16:33    [10981199]     Ответить | Цитировать Сообщить модератору
 Re: Поясните CTE  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31983
yado4eg
такой вариант да, но мне хотелось использовать уже готовую выборку(CTE) еще раз.
а так прейдеться еще раз дублировать кусок кода, ну или оформлять табличную функцию, что в данном случае мне не нужно.
Из CTE не делается выборки, это просто текст. Поэтому и не сделана возможность использовать определение CTE второй раз - ничего, кроме уменьшения набора текста, это не даст (хотя ИМХО было бы полезно).
yado4eg
daw,

> жаль но табличный переменных нет. в ms server 2005.
или я чего-то не знаю ?
Есть.

Вы спутали с табличными параметрами.
15 июл 11, 16:33    [10981200]     Ответить | Цитировать Сообщить модератору
 Re: Поясните CTE  [new]
yado4eg
Member

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


к вопросу ..
declare @v1 .. , @v2 .., @table (@vv1, @vv2)  
;with CTE as (select.. from..)
isnset into @vv1, @vv2
  select * from CTE 

это имелось ввиду ?
15 июл 11, 16:34    [10981214]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить