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

Откуда:
Сообщений: 356
всем привет

У меня перестал работать простейший запрос

	update #Ent set saldo = 1
	update T set
		T.Saldo =  E.Saldo + 1, 
                Rate = E.ID
	from #Ent T
		join #Ent E on E.ID = T.ID - 1 

idsaldorate
1 1 NULL
2 2 1
3 2 2
4 2 3
8 2 7


Если сделать через подселект
T.Saldo = (select E.Saldo + 1 from #Ent E where E.ID = T.ID)
то будет тоже самое.

Если делать через цикл и писать where id = @id по каждой записи, то всё ок

Такой же запрос на другой выборке данных отрабатывает ок. Выборки отличаются лишь парой столбцов (кроме указанных там ещё несколько) и несколько другим составом таблиц, из которых выбираются.

Как я думаю, сиквел как то не так оптимизирует запрос. Есть идеи?
27 июл 11, 17:52    [11035837]     Ответить | Цитировать Сообщить модератору
 Re: перестал работать апдейт с join  [new]
Glory
Member

Откуда:
Сообщений: 104751
Вы не результат показывайте, а исходные данные
27 июл 11, 17:56    [11035868]     Ответить | Цитировать Сообщить модератору
 Re: перестал работать апдейт с join  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
Dmitry V. Nechaev,
... E.ID = T.ID ... не то же самое, что ... E.ID = T.ID - 1 ...
Если не поможет, то подготовьте тестовые данные.
27 июл 11, 17:56    [11035871]     Ответить | Цитировать Сообщить модератору
 Re: перестал работать апдейт с join  [new]
Dmitry V. Nechaev
Member

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

Ну вот в табличке собственно исходные данные и есть.
Остальное - не имеющие отношения к делу поля.
На id висит PK кластерный.
27 июл 11, 17:58    [11035891]     Ответить | Цитировать Сообщить модератору
 Re: перестал работать апдейт с join  [new]
Dmitry V. Nechaev
Member

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

Ну смысл то сложить предыдущее значение с чем то из теперешнего. Для примера с единичкой.
27 июл 11, 18:00    [11035906]     Ответить | Цитировать Сообщить модератору
 Re: перестал работать апдейт с join  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
Dmitry V. Nechaev, вам чтоль нарастающий итог нужен? Дык это по-другому делается.
* И почитайте рекомендации к оформлению сообщений.
27 июл 11, 18:02    [11035926]     Ответить | Цитировать Сообщить модератору
 Re: перестал работать апдейт с join  [new]
Glory
Member

Откуда:
Сообщений: 104751
Dmitry V. Nechaev
Glory,

Ну вот в табличке собственно исходные данные и есть.
Остальное - не имеющие отношения к делу поля.
На id висит PK кластерный.

Если в saldo везде была 1, то 1+1 это будет 2. Что тут неправильного ?
27 июл 11, 18:03    [11035934]     Ответить | Цитировать Сообщить модератору
 Re: перестал работать апдейт с join  [new]
Dmitry V. Nechaev
Member

Откуда:
Сообщений: 356
Glory
Если в saldo везде была 1, то 1+1 это будет 2. Что тут неправильного ?


Дело в том, что такой запрос уже отработал как мне надо. Сервер брал значение которое получилось после апдейта.
Фактически на момент апдейта строки 3, из второй бралось значение 2 а не 1.

Таким образом, я пришёл к выводу что применяя разные стратегии сервер получает разные результаты. Как и почему - я не знаю.

И таки да, мне нужен нарастающий итог.
27 июл 11, 18:10    [11035980]     Ответить | Цитировать Сообщить модератору
 Re: перестал работать апдейт с join  [new]
Glory
Member

Откуда:
Сообщений: 104751
Dmitry V. Nechaev
Glory
Если в saldo везде была 1, то 1+1 это будет 2. Что тут неправильного ?


Дело в том, что такой запрос уже отработал как мне надо. Сервер брал значение которое получилось после апдейта.
Фактически на момент апдейта строки 3, из второй бралось значение 2 а не 1.

Вы придумываете. Такого никогда не было в MSSQL. Текущий запрос всегда видит данные до изменения
27 июл 11, 18:11    [11035989]     Ответить | Цитировать Сообщить модератору
 Re: перестал работать апдейт с join  [new]
Dmitry V. Nechaev
Member

Откуда:
Сообщений: 356
Glory
Dmitry V. Nechaev
пропущено...


Дело в том, что такой запрос уже отработал как мне надо. Сервер брал значение которое получилось после апдейта.
Фактически на момент апдейта строки 3, из второй бралось значение 2 а не 1.

Вы придумываете. Такого никогда не было в MSSQL. Текущий запрос всегда видит данные до изменения


Не буду спорить. Вероятно я ошибся, плохо проверив данные.

Тогда вопрос - можно ли одним запросом получить данные как я хочу?
Чтобы был нарастающий итог (предыдущий итог минус дебет плюс кредит).
Апдейтом или селектом. Без инсерта.
27 июл 11, 18:17    [11036020]     Ответить | Цитировать Сообщить модератору
 Re: перестал работать апдейт с join  [new]
Dmitry V. Nechaev
Member

Откуда:
Сообщений: 356
kDnZP
Dmitry V. Nechaev, вам чтоль нарастающий итог нужен? Дык это по-другому делается.
* И почитайте рекомендации к оформлению сообщений.


Вы не могли бы подсказать, как именно.
27 июл 11, 18:23    [11036060]     Ответить | Цитировать Сообщить модератору
 Re: перестал работать апдейт с join  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31990
Dmitry V. Nechaev
kDnZP
Dmitry V. Nechaev, вам чтоль нарастающий итог нужен? Дык это по-другому делается.
* И почитайте рекомендации к оформлению сообщений.


Вы не могли бы подсказать, как именно.
Нарастающий итог
27 июл 11, 18:29    [11036091]     Ответить | Цитировать Сообщить модератору
 Re: перестал работать апдейт с join  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
Dmitry V. Nechaev, Нарастающий итог
27 июл 11, 18:30    [11036095]     Ответить | Цитировать Сообщить модератору
 Re: перестал работать апдейт с join  [new]
Dmitry V. Nechaev
Member

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

Всем спасибо.
27 июл 11, 18:34    [11036110]     Ответить | Цитировать Сообщить модератору
 Re: перестал работать апдейт с join  [new]
kapelan
Member

Откуда: хутор БольшойБугор
Сообщений: 726
Dmitry V. Nechaev
...
Тогда вопрос - можно ли одним запросом получить данные как я хочу?...

дело в том что никто кроме Вас етого не знает ;)
правильно составленный вопрос ето 50% ответа.
Хотите быстрый ответ ?
составте вопрос с исходными данными и желаемым результатом - и воздастся испрошающему
27 июл 11, 18:41    [11036140]     Ответить | Цитировать Сообщить модератору
 Re: перестал работать апдейт с join  [new]
Dmitry V. Nechaev
Member

Откуда:
Сообщений: 356
kapelan
Dmitry V. Nechaev
...
Тогда вопрос - можно ли одним запросом получить данные как я хочу?...

дело в том что никто кроме Вас етого не знает ;)
правильно составленный вопрос ето 50% ответа.
Хотите быстрый ответ ?
составте вопрос с исходными данными и желаемым результатом - и воздастся испрошающему


Ваистину.

Однако я напрочь забыл, что сервер не видит изменений до конца операции. Т.о. в апдейте в принципе невозможно и получить изменённые записи из изменяемой таблицы.
27 июл 11, 19:19    [11036265]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить