Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 вопрос по апдейту переменного количества колонок  [new]
__ctrl-c__
Guest
Подскажите пожалуйста, может кто то находил решение такой задачи:

Есть приложение, которое работает с базой через хранимки, для любой сущности есть комплект хранимок (Get, Ins, Upd, Del). Хранимка выполняющая апдейт принимает в параметры все поля сущности, и мы апдейтим соответственно все поля в таблице. Иногда это вызывает затруднения так как триггерная функция апдейтед вернет 1 даже если мы затерли колонту прежним значением. Есть ли какой то изящный путь апдейтить лишь те колонки которые изменились?

Пока что все что видится, это либо динамика, либо горы ифов, мердж тоже не подходит, так как он может содержать лишь 1 апдейт.
12 янв 12, 12:42    [11891468]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по апдейту переменного количества колонок  [new]
gds
Member

Откуда: Железнодорожный
Сообщений: 1842
Блог
__ctrl-c__,

Я вижу два пути.
1. Проверки в процедуре или приложении, старое значение = новое значение.
2. Проверка хеш-значения/функции.
Hash (1, 2, 3)
12 янв 12, 13:13    [11891787]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по апдейту переменного количества колонок  [new]
iap
Member

Откуда: Москва
Сообщений: 47157
CREATE TRIGGER InsteadOfUpdateT ON T INSTEAD OF UPDATE AS
IF EXISTS(SELECT * FROM inserted)
BEGIN
 SET NOCOUNT ON;

 UPDATE T SET
  T.F1=i.F1
 ,T.F2=i.F2
 ,..........................
 ,T.Fn=i.Fn
 FROM T
  JOIN inserted i ON T.PK=i.PK
  JOIN deleted  d ON T.PK=d.PK
 WHERE NOT EXISTS(SELECT i.* INTERSECT SELECT d.*);
END;
??
12 янв 12, 14:16    [11892299]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по апдейту переменного количества колонок  [new]
SomewhereSomehow
Member

Откуда: Moscow
Сообщений: 2480
Блог
iap,

А как это поможет? Допустим, будет разница в одной колонке, но остальные-то все равно проапдейтятся, а я так понял автор хочет не обновлять колонки в которых не было реальных изменений данных.
Имхо, простого пути нет.
12 янв 12, 14:44    [11892555]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по апдейту переменного количества колонок  [new]
Deff
Member

Откуда: Пермь
Сообщений: 18328
Динамика только.
12 янв 12, 15:02    [11892797]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по апдейту переменного количества колонок  [new]
iap
Member

Откуда: Москва
Сообщений: 47157
В одном апдейте для каждой записи участвует одинаковое количество полей, правильно?
Ради не пойми чего апдейтить каждую строку в отдельности?
Да ещё и в динамическом запросе?

Не вижу в этом никакого смысла.
12 янв 12, 15:25    [11893040]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по апдейту переменного количества колонок  [new]
__ctrl-c__
Guest
iap
В одном апдейте для каждой записи участвует одинаковое количество полей, правильно?
Ради не пойми чего апдейтить каждую строку в отдельности?
Да ещё и в динамическом запросе?

Не вижу в этом никакого смысла.


ну по состоянию дел на сейчас, вызов хранимки апдейтит только 1 строку в таблице (приложение толкает столько хранимок сколько апдейченых строк)
12 янв 12, 15:56    [11893335]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по апдейту переменного количества колонок  [new]
iap
Member

Откуда: Москва
Сообщений: 47157
__ctrl-c__
iap
В одном апдейте для каждой записи участвует одинаковое количество полей, правильно?
Ради не пойми чего апдейтить каждую строку в отдельности?
Да ещё и в динамическом запросе?

Не вижу в этом никакого смысла.


ну по состоянию дел на сейчас, вызов хранимки апдейтит только 1 строку в таблице (приложение толкает столько хранимок сколько апдейченых строк)
Если одну строку, то о чём Вы беспокоитесь?
12 янв 12, 17:14    [11894068]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по апдейту переменного количества колонок  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
__ctrl-c__
Подскажите пожалуйста, может кто то находил решение такой задачи:

Есть приложение, которое работает с базой через хранимки, для любой сущности есть комплект хранимок (Get, Ins, Upd, Del). Хранимка выполняющая апдейт принимает в параметры все поля сущности, и мы апдейтим соответственно все поля в таблице. Иногда это вызывает затруднения так как триггерная функция апдейтед вернет 1 даже если мы затерли колонту прежним значением. Есть ли какой то изящный путь апдейтить лишь те колонки которые изменились?

Пока что все что видится, это либо динамика, либо горы ифов, мердж тоже не подходит, так как он может содержать лишь 1 апдейт.

Часто вы пользуетесь триггерной функцией апдейтед? Если нет, то чтобы узнать какие поля обновились проверяйте в триггере значения inserted vs. updated вместо использования функции.
13 янв 12, 00:38    [11896340]     Ответить | Цитировать Сообщить модератору
 Re: вопрос по апдейту переменного количества колонок  [new]
SIMPLicity_
Member

Откуда: (((@)))
Сообщений: 8898
Поигравшись с логгированием на триггерах, сделал полный жырнал логгирования (отдельной таблицей, пишутся только те поля, изменения которых меня интересуют из inserted и deleted, потом (по необходимости) строится достаточно злотрахуче-замороченный отчёт (заморочен ибо может произойти одновременное обновление нескольких записей, да так, что на прежние они совсем-совсем не похожи)) .
13 янв 12, 01:33    [11896462]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить