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

Откуда: Москва
Сообщений: 1613
Прошу помощи в соседнем разделе Microsoft Access / привести поведение UPDATE на SQL Server к поведению как у Access

Суть: UPDATE запрос ведёт себя по разному в SQL server и Access. Эта разница описана в документации. Как обойти/исправить эту разницу?

Microsoft SQL Server 2017 (RTM) - 14.0.1000.169 (X64) Aug 22 2017 17:04:49 Copyright (C) 2017 Microsoft Corporation Express Edition (64-bit) on Windows 10 Pro 10.0 <X64> (Build 16299: ) (Hypervisor)
2 ноя 18, 09:14    [21722129]     Ответить | Цитировать Сообщить модератору
 Re: привести поведение UPDATE на SQL Server к поведению как у Access  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31355
4d_monster
Как обойти/исправить эту разницу?
Вы же сами нашли решение - переписать код, который на MSSQL работает не так, как вам нужно.

Не представляю, какие ещё могут быть варианты? Опции "как в ACCESS" в MSSQL нет.
2 ноя 18, 09:36    [21722159]     Ответить | Цитировать Сообщить модератору
 Re: привести поведение UPDATE на SQL Server к поведению как у Access  [new]
4d_monster
Member

Откуда: Москва
Сообщений: 1613
alexeyvg,

Я нашёл решение, которое могу применить в ручном режиме. А хочу найти такое, которое можно применить программно. Обернуть в группировку одну из таблиц запроса c одним JOIN , можно при помощи простого кода, а когда JOINов больше и целевая таблица внутри этой цепочки - программа по анализу и изменению текста запроса мне кажется слишком трудоёмкая.
2 ноя 18, 09:45    [21722170]     Ответить | Цитировать Сообщить модератору
 Re: привести поведение UPDATE на SQL Server к поведению как у Access  [new]
court
Member

Откуда:
Сообщений: 2013
4d_monster,

чисто как вариант, - можно триггер INSTEAD OF "прицепить" который будет "моделировать" такое поведение при UPDATE

Но правильно было бы, конечно, переделывать.

Вообще не знаю, кто и чем думал, построив логику на такой частной и "дикой" особенности Акс-а ... !
2 ноя 18, 10:21    [21722212]     Ответить | Цитировать Сообщить модератору
 Re: привести поведение UPDATE на SQL Server к поведению как у Access  [new]
invm
Member

Откуда: Москва
Сообщений: 9343
court
чисто как вариант, - можно триггер INSTEAD OF "прицепить" который будет "моделировать" такое поведение при UPDATE
Откуда триггер возьмет множество строк на одну обновляемую?
2 ноя 18, 10:38    [21722231]     Ответить | Цитировать Сообщить модератору
 Re: привести поведение UPDATE на SQL Server к поведению как у Access  [new]
Shakill
Member

Откуда: мск
Сообщений: 1880
4d_monster
Я нашёл решение, которое могу применить в ручном режиме.

это и есть правильное решение в данном случае, надо переписывать несовместимый код. результаты вашей миграции ещё потом поддерживать как-то людям придётся
2 ноя 18, 10:42    [21722236]     Ответить | Цитировать Сообщить модератору
 Re: привести поведение UPDATE на SQL Server к поведению как у Access  [new]
court
Member

Откуда:
Сообщений: 2013
invm
court
чисто как вариант, - можно триггер INSTEAD OF "прицепить" который будет "моделировать" такое поведение при UPDATE
Откуда триггер возьмет множество строк на одну обновляемую?
а это не понадобится :)

Имелось в виду, что в триггере, вместо вызвавшего его
UPDATE B SET B.valB = B.valB + A.valA FROM A INNER JOIN B ON A.id = B.id ;

будет выполнено
UPDATE B SET B.valB = B.valB + AA.valA FROM (SELECT SUM(valA) as valA, id FROM A GROUP BY id) AS AA INNER JOIN B ON AA.id = B.id ;
2 ноя 18, 10:54    [21722252]     Ответить | Цитировать Сообщить модератору
 Re: привести поведение UPDATE на SQL Server к поведению как у Access  [new]
invm
Member

Откуда: Москва
Сообщений: 9343
court
будет выполнено...
Т.е. специализированный костыльный триггер, который еще надо будет как-то научить отличать "костыльный" случай от "некостыльного"?
2 ноя 18, 11:15    [21722291]     Ответить | Цитировать Сообщить модератору
 Re: привести поведение UPDATE на SQL Server к поведению как у Access  [new]
court
Member

Откуда:
Сообщений: 2013
invm
Т.е. специализированный костыльный триггер
он самый :)

"Отчаянные времена требуют отчаянных мер" (с) :))
Описываем все возможные запросы UPDATE B и "реакцию" на них в триггере.
Все "не описанные" "давим" raiserror-ом. Так победим ! :)
2 ноя 18, 11:29    [21722313]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить