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

Откуда: Москва
Сообщений: 10
Всем привет! Изучаю T-SQL не так давно, на данный момент читаю книгу, в ней не понятен Пример:


Set NOCOUNT on;

IF OBJECT_ID('dbo.T1','U') is not null drop table dbo.T1

Go

Create table dbo.T1
(
col1 int null,
col2 VARCHAR(10) not null
);

Insert into dbo.T1(col2)
Values('C'),('A'),('B'),('A'),('C'),('B');



WITH C AS 
(
Select col1,col2, ROW_NUMBER() over(order by col2) AS rownum
 From T1
)


UPDATE C 
Set col1 = rownum



Вопрос! Почему меняется таблица T1, если UPDATE применяется к CTE?
1 июл 14, 11:16    [16242387]     Ответить | Цитировать Сообщить модератору
 Re: CTE и Update. Помогите разобраться!!  [new]
Glory
Member

Откуда:
Сообщений: 104760
Natali_79
Почему меняется таблица T1, если UPDATE применяется к CTE?

Потому что CTE - это обертка

ЗЫ
Я так понимаю, что скоро вообще никто не сможет написать запрос без CTE
1 июл 14, 11:19    [16242407]     Ответить | Цитировать Сообщить модератору
 Re: CTE и Update. Помогите разобраться!!  [new]
Guf
Member

Откуда: Новосибирск
Сообщений: 658
Natali_79,

Потому что СТЕ - это "синтаксический сахар". При выполнении запроса оно разворачивается и подставляется куда надо. Т.о. Ваш запрос будет выглядеть, примерно, так
UPDATE C 
   Set col1 = rownum
   FROM(Select col1,col2, ROW_NUMBER() over(order by col2) AS rownum
            From T1
       ) C
1 июл 14, 11:27    [16242457]     Ответить | Цитировать Сообщить модератору
 Re: CTE и Update. Помогите разобраться!!  [new]
Natali_79
Member

Откуда: Москва
Сообщений: 10
Примерно понятно. Спасибо!
1 июл 14, 12:28    [16242959]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить