powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Подскажите оптимальное решение Update выборочных Field таблицы
46 сообщений из 46, показаны все 2 страниц
Подскажите оптимальное решение Update выборочных Field таблицы
    #39622980
Фотография Shovgenyuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть две таблицы:
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
Подскажите оптимальное решение Update выборочных Field таблицы
    #39622981
aleksrov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shovgenyuk,

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

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

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



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

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

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

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

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

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

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

Кроме описанного выше, есть намерения поставить ограничение на Update отдельных столбцов для разных групп пользователей.
Если при таком ограничении будет Update всех полей, даже тех, которые не меняються, то будет ошибка.Эээ, так если поле не меняется, значит, и апдэйта не было, и право на апдэйт для данной операции данному пользователю не нужно?
Тут уже вопрос, как вы проверяете эти права. Не надо их проверять в триггере командами COLUMNS_UPDATED() или IF(UPDATE()), и не будет проблем.
...
Рейтинг: 0 / 0
Подскажите оптимальное решение Update выборочных Field таблицы
    #39623199
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quote alexeyvg]Что дают в данном случае COLUMNS_UPDATED() и UPDATE()?
Зачем они вообще нужны когда бы то ни было?!
...
Рейтинг: 0 / 0
Подскажите оптимальное решение Update выборочных Field таблицы
    #39623206
Фотография Shovgenyuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgЭээ, так если поле не меняется, значит, и апдэйта не было, и право на апдэйт для данной операции данному пользователю не нужно?
Да, именно так.
Если новое значение поля равно старому и на это поле есть ограничение апдейт, то не надо его апдейтить вообще.
Иначе пользователь получит сообщение об ошибке, например "у вас отсутствует разрешение на изменение даты документа" и ответит "так я и не меняю дату, она какая была, такая и остаётся" и будет прав.
...
Рейтинг: 0 / 0
Подскажите оптимальное решение Update выборочных Field таблицы
    #39623207
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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
Подскажите оптимальное решение Update выборочных Field таблицы
    #39623210
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShovgenyukalexeyvgЭээ, так если поле не меняется, значит, и апдэйта не было, и право на апдэйт для данной операции данному пользователю не нужно?
Да, именно так.
Если новое значение поля равно старому и на это поле есть ограничение апдейт, то не надо его апдейтить вообще.
Иначе пользователь получит сообщение об ошибке, например "у вас отсутствует разрешение на изменение даты документа" и ответит "так я и не меняю дату, она какая была, такая и остаётся" и будет прав.То, что вы описываете, реализуется только через динамический SQL.
Гораздо проще сделать набор VIEW для разных пользователей только с полями, на которые у них есть права.
И апдейтить таблицы только через эти VIEW.
...
Рейтинг: 0 / 0
Подскажите оптимальное решение Update выборочных Field таблицы
    #39623216
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну, имхо, можно получать изменённые колонки, если прав на них нет - орать, если достаточно, то апдейт всей линии без извращений
...
Рейтинг: 0 / 0
Подскажите оптимальное решение Update выборочных Field таблицы
    #39623217
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iapShovgenyukпропущено...

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

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

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

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

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

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

чем?Сервером?Хотя, разве что если INSTEAD OF UPDATE...
...
Рейтинг: 0 / 0
Подскажите оптимальное решение Update выборочных Field таблицы
    #39623263
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iap,

авторСервером?
это в смысле column permission? так для него и делать ничего не надо

авторINSTEAD OF UPDATE
ну да, возможно + INSERT
...
Рейтинг: 0 / 0
Подскажите оптимальное решение Update выборочных Field таблицы
    #39623264
Фотография Shovgenyuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
До гемороя додумался потому что надо перенести логику с клиента на сервер.
Сейчас на клиенте анализируется старое значение и новое значение отдельных полей и если выполнены определённые правила, то выполняется апдейт.
Задолбался я клиент переписывать и всё время добавлять/изменять эти правила для каждого поля.
Вот и возникла идея оставить клиенту функцию сугубо сбора данных и пересылки их на сервер, а всем остальным должен заниматься сервер.
Самый важный плюс: изменение логики на сервере без переписывания и переустановки клиента.

Плюс ко всему давно назрела необходимость логировать изменения и как-то в удобной форме показывать их пользователю.
...
Рейтинг: 0 / 0
Подскажите оптимальное решение Update выборочных Field таблицы
    #39623265
asdor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShovgenyukTaPaKну, имхо, можно получать изменённые колонки, если прав на них нет - орать, если достаточно, то апдейт всей линии без извращений

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

Как говорилось выше, проверять надо до update.
И посылать update только тех полей, которые разрешены данному пользователю.
Даже не пойму, зачем сообщения "Вам нельзя менять это поле".
Клиент тоже должен быть удобным.
Я б отдал это на клиента, и просто, на клиенте не давал менять.
...
Рейтинг: 0 / 0
Подскажите оптимальное решение Update выборочных Field таблицы
    #39623269
Фотография Shovgenyuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asdorЯ б отдал это на клиента, и просто, на клиенте не давал менять.

Так сейчас и есть, но переписывать клиент и переустанавливать на сотнях ПК раз в неделю или две недели - напряжно и уже достало.
...
Рейтинг: 0 / 0
Подскажите оптимальное решение Update выборочных Field таблицы
    #39623270
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShovgenyukasdorЯ б отдал это на клиента, и просто, на клиенте не давал менять.

Так сейчас и есть, но переписывать клиент и переустанавливать на сотнях ПК раз в неделю или две недели - напряжно и уже достало.
а клиент о новых колонках и что с ними делать как узнаёт?
...
Рейтинг: 0 / 0
Подскажите оптимальное решение Update выборочных Field таблицы
    #39623273
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShovgenyukasdorЯ б отдал это на клиента, и просто, на клиенте не давал менять.

Так сейчас и есть, но переписывать клиент и переустанавливать на сотнях ПК раз в неделю или две недели - напряжно и уже достало.Что мешает на клиенте формировать запрос на основе данных
из системных таблиц относительно прав доступа к полям таблицы?
А на сервере можно апдейтить только записи, в которых что-то изменилось,
например, в триггере INSTEAD OF UPDATE.
Переписывать клиента в этом случае не придётся.
...
Рейтинг: 0 / 0
Подскажите оптимальное решение Update выборочных Field таблицы
    #39623274
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iapShovgenyukпропущено...


Так сейчас и есть, но переписывать клиент и переустанавливать на сотнях ПК раз в неделю или две недели - напряжно и уже достало.Что мешает на клиенте формировать запрос на основе данных
из системных таблиц относительно прав доступа к полям таблицы?
А на сервере можно апдейтить только записи, в которых что-то изменилось,
например, в триггере INSTEAD OF UPDATE.
Переписывать клиента в этом случае не придётся.
тогда надо и не давать редактировать, а то получится он стучит а ничего не меняется, вдеь в запрос уходит только то что можно
...
Рейтинг: 0 / 0
Подскажите оптимальное решение Update выборочных Field таблицы
    #39623275
Фотография Shovgenyuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iapЧто мешает на клиенте формировать запрос на основе данных
из системных таблиц относительно прав доступа к полям таблицы?
А на сервере можно апдейтить только записи, в которых что-то изменилось,
например, в триггере INSTEAD OF UPDATE.
Переписывать клиента в этом случае не придётся.

Вопрос не только в правах доступа. Основное - это бизнес логика. тригеры не используються. Апдейт происходит в SP
...
Рейтинг: 0 / 0
Подскажите оптимальное решение Update выборочных Field таблицы
    #39623276
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaKiapпропущено...
Что мешает на клиенте формировать запрос на основе данных
из системных таблиц относительно прав доступа к полям таблицы?
А на сервере можно апдейтить только записи, в которых что-то изменилось,
например, в триггере INSTEAD OF UPDATE.
Переписывать клиента в этом случае не придётся.
тогда надо и не давать редактировать, а то получится он стучит а ничего не меняется, вдеь в запрос уходит только то что можноЕсли оно в таблице уже и так такое, как надо, то не всё ли равно, меняем или нет?!
И зачем знать, изменялось или нет?
Я бы сказал, клиент должен не "не давать редактировать", а вообще не показывать поля, к которым нет доступа.
...
Рейтинг: 0 / 0
Подскажите оптимальное решение Update выборочных Field таблицы
    #39623279
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShovgenyukiapЧто мешает на клиенте формировать запрос на основе данных
из системных таблиц относительно прав доступа к полям таблицы?
А на сервере можно апдейтить только записи, в которых что-то изменилось,
например, в триггере INSTEAD OF UPDATE.
Переписывать клиента в этом случае не придётся.

Вопрос не только в правах доступа. Основное - это бизнес логика. тригеры не используються. Апдейт происходит в SPТриггер - это тоже процедура. Но гарантированно вызывающаяся по совершенно определённому событию.
В отличие от SP, которую можно вызвать, а можно и не вызывать.
...
Рейтинг: 0 / 0
Подскажите оптимальное решение Update выборочных Field таблицы
    #39623282
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iap,

авторсли оно в таблице уже и так такое, как надо, то не всё ли равно, меняем или нет?!
как пользователь поймёт, что ему нельзя этого делать, если ему всё даёт, а данные не меняет, а сосед меняет без проблем, выставляют инцидент и тд

авторЯ бы сказал, клиент должен не "не давать редактировать", а вообще не показывать поля, к которым нет доступа.
или так
...
Рейтинг: 0 / 0
Подскажите оптимальное решение Update выборочных Field таблицы
    #39623283
Фотография Shovgenyuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав КолосовShovgenyuk,

бред бредович, а не "идея". Вы всерьез верите, что сервер каждое поле обновляет отдельной операцией? Уменьшите слегка нагрузку на журнал, не более того.

Вы хотите сказать, что для сервера:
Update T1 SET Field1=10, Field2=20, Field3=30 .... FieldN=1000 WHERE FieldKey=1

одно и тоже, что

Update T1 SET Field1=10 WHERE FieldKey=1
Update T1 SET Field2=20 WHERE FieldKey=1
Update T1 SET Field3=30 WHERE FieldKey=1
...
Update T1 SET FieldN=1000 WHERE FieldKey=1

?
...
Рейтинг: 0 / 0
Подскажите оптимальное решение Update выборочных Field таблицы
    #39623284
asdor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShovgenyukasdorЯ б отдал это на клиента, и просто, на клиенте не давал менять.

Так сейчас и есть, но переписывать клиент и переустанавливать на сотнях ПК раз в неделю или две недели - напряжно и уже достало.

Ну а зачем?
Сделайте что бы клиент знал о доступных для редактирования полях, и запретите редактирование других.
Менять это можно и на сервере. Главное клиенту знать.
Не надо будет никаких перекомпиляций.

Вам просто немного надо над НОВОЙ архитектурой подумать.

И... странно, вы что в ручную бегаете по 200 компам?
Надо бы систему, которая автоматом обновляет)))
...
Рейтинг: 0 / 0
Подскажите оптимальное решение Update выборочных Field таблицы
    #39623287
asdor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShovgenyukВладислав КолосовShovgenyuk,

бред бредович, а не "идея". Вы всерьез верите, что сервер каждое поле обновляет отдельной операцией? Уменьшите слегка нагрузку на журнал, не более того.

Вы хотите сказать, что для сервера:
Update T1 SET Field1=10, Field2=20, Field3=30 .... FieldN=1000 WHERE FieldKey=1

одно и тоже, что

Update T1 SET Field1=10 WHERE FieldKey=1
Update T1 SET Field2=20 WHERE FieldKey=1
Update T1 SET Field3=30 WHERE FieldKey=1
...
Update T1 SET FieldN=1000 WHERE FieldKey=1

?

Конечно же нет)))
В первом случае 1 запрос, во втором N запросов)))
...
Рейтинг: 0 / 0
Подскажите оптимальное решение Update выборочных Field таблицы
    #39623289
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вообще хоть показывай, хоть не показывай, надо проверять на сервере, а не на клиенте
...
Рейтинг: 0 / 0
Подскажите оптимальное решение Update выборочных Field таблицы
    #39623293
asdor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaKвообще хоть показывай, хоть не показывай, надо проверять на сервере, а не на клиенте
Ну да. Значит сохранять через ХП, в которой в зависимости от прав вызвавшего, IF-ами все проверять.
Но и клиенту должно быть комфортно))))
...
Рейтинг: 0 / 0
Подскажите оптимальное решение Update выборочных Field таблицы
    #39623309
Гигабайт Мегабайтович Килобайтов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShovgenyukДо гемороя додумался потому что надо перенести логику с клиента на сервер.
Сейчас на клиенте анализируется старое значение и новое значение отдельных полей и если выполнены определённые правила, то выполняется апдейт.
Задолбался я клиент переписывать и всё время добавлять/изменять эти правила для каждого поля.
Вот и возникла идея оставить клиенту функцию сугубо сбора данных и пересылки их на сервер, а всем остальным должен заниматься сервер.
Самый важный плюс: изменение логики на сервере без переписывания и переустановки клиента.

Плюс ко всему давно назрела необходимость логировать изменения и как-то в удобной форме показывать их пользователю.
таки я был прав! ))
но вам не приходило в голову что при переносе логики с клиента на сервер , надо заодно и алгоритмы работами с данными менять? ))
...
Рейтинг: 0 / 0
Подскажите оптимальное решение Update выборочных Field таблицы
    #39623311
Фотография Shovgenyuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Клиенту нельзя не показывать поля, потому что у него есть права их читать.
Динамически блокировать изменение полей на клиенте к которым нету доступа - не проблема.

О новых полях клиент не знает. Речь идёт пока что только о существующих полях. Хотя планируется и динамическое формирование форм для ввода на клиенте. Это тоже не проблемма. Есть метаданные и можна сформировать на формах ввода в клиенте динамические элементы и динамически асоциировать из из полями таблиц.

Опишу саму идея подробнее.

Клиент занимаеться только сбором данных и пересылкой их на сервер.
Сервер получает данные из клиента и записівает их во временную таблицу с неким GUID, анализирует права доступа и бизнес-логику. При необходимости формирует специальную "анкету" для клиента которая представляет собой ХML-документ из упомянутым GUID, предупреждениями, уточняющими вопросами, сообщениями для клиента.
Клиент отображает ХML-анкету и отвечает на вопросы типа "вы уверены, что надо изменить номер документа" да/нет;
"вы подтверждаете и берете на себя ответственность что в данном документе есть пометка - срочно выполнить!" да,подтверждаю/нет;
"уточните кто дал разрешение исполнить это без очереди..." ФИО...
и т.д.
Или же ХML-анкета содержит сообщения о недопустимости апдейта по причинам отсутсвия доступа или чего-то другого...

Клиент заполняе анкету и отправляет на сервер.
Сервер ищет по упомянутому GUID первоначальные данные во временной таблице и сопоставляет их из ответами в енкете, анализирует и апдейтит или не апдейтит о чём отдаёт ответ клиенту.

Плюс должна быть удобная история всех изменений.
...
Рейтинг: 0 / 0
Подскажите оптимальное решение Update выборочных Field таблицы
    #39623313
Фотография Shovgenyuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asdorShovgenyukпропущено...


Вы хотите сказать, что для сервера:
Update T1 SET Field1=10, Field2=20, Field3=30 .... FieldN=1000 WHERE FieldKey=1

одно и тоже, что

Update T1 SET Field1=10 WHERE FieldKey=1
Update T1 SET Field2=20 WHERE FieldKey=1
Update T1 SET Field3=30 WHERE FieldKey=1
...
Update T1 SET FieldN=1000 WHERE FieldKey=1

?

Конечно же нет)))
В первом случае 1 запрос, во втором N запросов)))
Ну так я как раз и пытаюсь сделать так что бы был один запрос-первый случай.
...
Рейтинг: 0 / 0
Подскажите оптимальное решение Update выборочных Field таблицы
    #39623356
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shovgenyuk,

судя по задаче, Вам нужно повернуть поля анкеты вертикально, превратить в пары "ключ-значение".
...
Рейтинг: 0 / 0
Подскажите оптимальное решение Update выборочных Field таблицы
    #39623403
Фотография Shovgenyuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав КолосовShovgenyuk,

судя по задаче, Вам нужно повернуть поля анкеты вертикально, превратить в пары "ключ-значение".

Да, нужно, но не все поля. Кроме того мне нужно повернуть вертикально поля для истории изменений что бы потом показать клиенту кто, что и когда изменил в документе. Должна получится таблица в первой колонке которой перечень полей (атрибутов) , а во всех остальных колонках значения этих атрибутов. Количество остальных колонок должно быть равно количеству изменений (Update'ов).
При этом в таблице (в первой колонке) должны быть только те поля, которые когда либо изменялись (не все).

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


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