Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
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] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Потому что CTE - это обертка ЗЫ Я так понимаю, что скоро вообще никто не сможет написать запрос без CTE |
||
1 июл 14, 11:19 [16242407] Ответить | Цитировать Сообщить модератору |
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] Ответить | Цитировать Сообщить модератору |
Natali_79 Member Откуда: Москва Сообщений: 10 |
Примерно понятно. Спасибо! |
1 июл 14, 12:28 [16242959] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |