Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Подскажите оптимальное решение Update выборочных Field таблицы / 25 сообщений из 46, страница 1 из 2
30.03.2018, 04:57
    #39622980
Shovgenyuk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите оптимальное решение Update выборочных Field таблицы
Есть две таблицы:
Table1 из столбцами: Field1, Field2, Field3 .... FieldN
Table2 из такими же столбцами: Field1, Field2, Field3 .... FieldN
У Table2 только одна запись из новыми значениями для одной из многих записей из Table1.


Нужно в Table1 обновить только те столбцы, значение в которых изменились.
Если Table1.Field1 отличается от Table2.Field1, то нужно выполнить
Update Table1 SET Field1 = Table2.Field1
Аналогично для всех остальных столбцов.

Если Table1.Field1 не отличается от Table2.Field1, то UPDATE не должно выполнятся.

Как можно это сделать кроме отдельных IF для каждого поля?
Идеально было бы делать один UPDATE сразу для всех Field, а не по отдельности для каждого.

Нужно универсальное решение для разных таблиц из разными именами и количеством полей.
...
Рейтинг: 0 / 0
30.03.2018, 05:06
    #39622981
aleksrov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите оптимальное решение Update выборочных Field таблицы
Shovgenyuk,

MERGE, BOL в помощь
...
Рейтинг: 0 / 0
30.03.2018, 09:44
    #39623033
Гигабайт Мегабайтович Килобайтов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите оптимальное решение Update выборочных Field таблицы
Shovgenyuk,

а как у вас определяется - изменилось или нет? ))
выскажу крамольную мысль )) - а почему не обновить все поля )) ведь если они не изменились - то значения при апдейте и не поменяются )) - т.е. вычисляете строки в которых поменялась информация и апдейтете все поля этих строк ))
...
Рейтинг: 0 / 0
30.03.2018, 09:48
    #39623035
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите оптимальное решение Update выборочных Field таблицы
ShovgenyukНужно в Table1 обновить только те столбцы, значение в которых изменились.
Если Table1.Field1 отличается от Table2.Field1, то нужно выполнить
Update Table1 SET Field1 = Table2.Field1
Аналогично для всех остальных столбцов.
Как я понимаю, для любой записи из Table2 найдётся куча записей в Table1, которые имеют другое значение Field1. И что, их все обновлять???

По-моему, Вы сильно перестарались с секретностью и упрощениями. Лучше показывайте реальную структуру таблиц - а заодно точно указывайте идентифицирующий набор полей для выполнения описанной операции (формально же он не обязан совпадать с первичным индексом).
...
Рейтинг: 0 / 0
30.03.2018, 11:01
    #39623099
Shovgenyuk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите оптимальное решение Update выборочных Field таблицы
AkinaКак я понимаю, для любой записи из Table2 найдётся куча записей в Table1, которые имеют другое значение Field1. И что, их все обновлять???



ShovgenyukУ Table2 только одна запись из новыми значениями для одной из многих записей из Table1

Поиск ОДНОЙ записи из Table1 которую надо обновлять производится по ключу
WHERE Table1.FieldKey=Table2.FieldKey
Первичный ключ в одном поле FieldKey.
...
Рейтинг: 0 / 0
30.03.2018, 11:05
    #39623104
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите оптимальное решение Update выборочных Field таблицы
ShovgenyukКак можно это сделать кроме отдельных IF для каждого поля?Зачем отдельные IF?
Просто обновляете все поля, если хоть одно отличается.
Технически это одно и то же, потому что выполняется обновление всей записи (если конечно поля не BLOB).
...
Рейтинг: 0 / 0
30.03.2018, 11:20
    #39623119
Shovgenyuk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите оптимальное решение Update выборочных Field таблицы
Гигабайт Мегабайтович КилобайтовShovgenyuk,

а почему не обновить все поля )) ведь если они не изменились - то значения при апдейте и не поменяются )) - т.е. вычисляете строки в которых поменялась информация и апдейтете все поля этих строк ))

Парралельно надо писать лог: кто, что, когда изменил.
Кроме того, есть некая бизнес-логика, которая определяет кому и при каких условиях можно изменять некоторые поля, а при каких - нельзя.
Сейчас это все на клиенте. Надо перенести всю бизнес-логику на сервер, а клиент будет просто собирать все значения для всех полей и передавать на сервер.

Поскольку для показа лога изменений клиенту все равно придётся анализировать и показывать только те поля, которые реально изменились, то почему бы этот анализ не делать сразу при Update.
...
Рейтинг: 0 / 0
30.03.2018, 11:26
    #39623125
Shovgenyuk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите оптимальное решение Update выборочных Field таблицы
alexeyvg,

Кроме описанного выше, есть намерения поставить ограничение на Update отдельных столбцов для разных групп пользователей.
Если при таком ограничении будет Update всех полей, даже тех, которые не меняються, то будет ошибка.
...
Рейтинг: 0 / 0
30.03.2018, 11:35
    #39623135
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите оптимальное решение Update выборочных Field таблицы
ShovgenyukПоиск ОДНОЙ записи из Table1 которую надо обновлять производится по ключу
WHERE Table1.FieldKey=Table2.FieldKey
Первичный ключ в одном поле FieldKey.О! а раньше об этом кто-то молчал аки партизан. Чего мы ещё не знаем?
...
Рейтинг: 0 / 0
30.03.2018, 11:39
    #39623140
Shovgenyuk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите оптимальное решение Update выборочных Field таблицы
Akina,

Просто вопрос о поиске столбцов которые надо апдейтить, со строками проблем нет :)
...
Рейтинг: 0 / 0
30.03.2018, 12:14
    #39623187
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите оптимальное решение Update выборочных Field таблицы
Shovgenyukalexeyvg,

Кроме описанного выше, есть намерения поставить ограничение на Update отдельных столбцов для разных групп пользователей.
Если при таком ограничении будет Update всех полей, даже тех, которые не меняються, то будет ошибка.Эээ, так если поле не меняется, значит, и апдэйта не было, и право на апдэйт для данной операции данному пользователю не нужно?
Тут уже вопрос, как вы проверяете эти права. Не надо их проверять в триггере командами COLUMNS_UPDATED() или IF(UPDATE()), и не будет проблем.
...
Рейтинг: 0 / 0
30.03.2018, 12:23
    #39623199
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите оптимальное решение Update выборочных Field таблицы
[quote alexeyvg]Что дают в данном случае COLUMNS_UPDATED() и UPDATE()?
Зачем они вообще нужны когда бы то ни было?!
...
Рейтинг: 0 / 0
30.03.2018, 12:34
    #39623206
Shovgenyuk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите оптимальное решение Update выборочных Field таблицы
alexeyvgЭээ, так если поле не меняется, значит, и апдэйта не было, и право на апдэйт для данной операции данному пользователю не нужно?
Да, именно так.
Если новое значение поля равно старому и на это поле есть ограничение апдейт, то не надо его апдейтить вообще.
Иначе пользователь получит сообщение об ошибке, например "у вас отсутствует разрешение на изменение даты документа" и ответит "так я и не меняю дату, она какая была, такая и остаётся" и будет прав.
...
Рейтинг: 0 / 0
30.03.2018, 12:35
    #39623207
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите оптимальное решение Update выборочных Field таблицы
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
UPDATE T1 SET
 T1.Field1=T2.Field1
,T1.Field2=T2.Field2
..............................
,T1.FieldN=T2.FieldN
FROM Table1 T1
JOIN Table2 T2 ON T1.FieldKey=T2.FieldKey
WHERE NOT EXISTS(SELECT T1.Field1,T1.Field2,...,T1.FieldN INTERSECT SELECT T2.Field1,T2.Field2,...,T2.FieldN);
...
Рейтинг: 0 / 0
30.03.2018, 12:37
    #39623210
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите оптимальное решение Update выборочных Field таблицы
ShovgenyukalexeyvgЭээ, так если поле не меняется, значит, и апдэйта не было, и право на апдэйт для данной операции данному пользователю не нужно?
Да, именно так.
Если новое значение поля равно старому и на это поле есть ограничение апдейт, то не надо его апдейтить вообще.
Иначе пользователь получит сообщение об ошибке, например "у вас отсутствует разрешение на изменение даты документа" и ответит "так я и не меняю дату, она какая была, такая и остаётся" и будет прав.То, что вы описываете, реализуется только через динамический SQL.
Гораздо проще сделать набор VIEW для разных пользователей только с полями, на которые у них есть права.
И апдейтить таблицы только через эти VIEW.
...
Рейтинг: 0 / 0
30.03.2018, 12:41
    #39623216
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите оптимальное решение Update выборочных Field таблицы
ну, имхо, можно получать изменённые колонки, если прав на них нет - орать, если достаточно, то апдейт всей линии без извращений
...
Рейтинг: 0 / 0
30.03.2018, 12:43
    #39623217
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите оптимальное решение Update выборочных Field таблицы
iapShovgenyukпропущено...

Да, именно так.
Если новое значение поля равно старому и на это поле есть ограничение апдейт, то не надо его апдейтить вообще.
Иначе пользователь получит сообщение об ошибке, например "у вас отсутствует разрешение на изменение даты документа" и ответит "так я и не меняю дату, она какая была, такая и остаётся" и будет прав.То, что вы описываете, реализуется только через динамический SQL.
Гораздо проще сделать набор VIEW для разных пользователей только с полями, на которые у них есть права.
И апдейтить таблицы только через эти VIEW.Нет! Вру! Ведь и в этом случае надо получить как-то список полей для апдейта.
А это возможно только в DSQL
...
Рейтинг: 0 / 0
30.03.2018, 13:05
    #39623242
Shovgenyuk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите оптимальное решение Update выборочных Field таблицы
TaPaKну, имхо, можно получать изменённые колонки, если прав на них нет - орать, если достаточно, то апдейт всей линии без извращений

Получить изменённые колонки, на котрых нет прав - это по сути и есть решение задачи.
В том то й вопрос, как получить только изменённые колонки ?
Ну а дальше уже можна накладывать разные условия: есть ли на них права, бизнес-логика и всё что угодно
...
Рейтинг: 0 / 0
30.03.2018, 13:14
    #39623247
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите оптимальное решение Update выборочных Field таблицы
Shovgenyuk,

ну в триггере это inserted с deleted join и сравнить
...
Рейтинг: 0 / 0
30.03.2018, 13:19
    #39623249
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите оптимальное решение Update выборочных Field таблицы
TaPaKShovgenyuk,

ну в триггере это inserted с deleted join и сравнитьТриггер-то тут при чём?
Права-то, небось, до триггера проверяются?
Не понимаю, как додумались до такого геморроя?!
За 30 лет работы с SQL мне, например, такое даже в голову не приходило.
...
Рейтинг: 0 / 0
30.03.2018, 13:21
    #39623251
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите оптимальное решение Update выборочных Field таблицы
Shovgenyuk,

бред бредович, а не "идея". Вы всерьез верите, что сервер каждое поле обновляет отдельной операцией? Уменьшите слегка нагрузку на журнал, не более того.
...
Рейтинг: 0 / 0
30.03.2018, 13:24
    #39623252
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите оптимальное решение Update выборочных Field таблицы
iap,
авторПрава-то, небось, до триггера проверяются?
чем?
...
Рейтинг: 0 / 0
30.03.2018, 13:26
    #39623254
Гигабайт Мегабайтович Килобайтов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите оптимальное решение Update выборочных Field таблицы
iapTaPaKShovgenyuk,

ну в триггере это inserted с deleted join и сравнитьТриггер-то тут при чём?
Права-то, небось, до триггера проверяются?
Не понимаю, как додумались до такого геморроя?!
За 30 лет работы с SQL мне, например, такое даже в голову не приходило.
ихма - пытаются один-в-один перенсти логику работы с клиента на сервер ))
...
Рейтинг: 0 / 0
30.03.2018, 13:31
    #39623258
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите оптимальное решение Update выборочных Field таблицы
TaPaKiap,
авторПрава-то, небось, до триггера проверяются?
чем?Сервером?
...
Рейтинг: 0 / 0
30.03.2018, 13:33
    #39623261
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите оптимальное решение Update выборочных Field таблицы
iapTaPaKiap,
пропущено...

чем?Сервером?Хотя, разве что если INSTEAD OF UPDATE...
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Подскажите оптимальное решение Update выборочных Field таблицы / 25 сообщений из 46, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]