powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как сделать Update одной таблицы из другой не меняя те поля которые равны
12 сообщений из 12, страница 1 из 1
Как сделать Update одной таблицы из другой не меняя те поля которые равны
    #32044209
Serg___
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как сделать Update одной таблицы из другой соедененных по первичному ключу не апдейтя те поля которые равны в таблицах. Нужно потому что на таблицу которую изменяем стоит тригер который запрещает менять некоторые поля при определенных условиях.
...
Рейтинг: 0 / 0
Как сделать Update одной таблицы из другой не меняя те поля которые равны
    #32044220
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
задать в JOIN-е все необходимые условия
...
Рейтинг: 0 / 0
Как сделать Update одной таблицы из другой не меняя те поля которые равны
    #32044226
Serg___
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проблема не в соеденении
А в том что если старое значение поля равно новому то поле не должно попасть в Update
...
Рейтинг: 0 / 0
Как сделать Update одной таблицы из другой не меняя те поля которые равны
    #32044227
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...ON mytable1.id = mytable2.id
AND mytable1.field1 <> mytable2.field1 ....
...
Рейтинг: 0 / 0
Как сделать Update одной таблицы из другой не меняя те поля которые равны
    #32044231
Serg___
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не подойдет (вся строка не проапдейтится)
Мне надо чтобы не вся строка не апдейтилась а только те поля которые равны.
...
Рейтинг: 0 / 0
Как сделать Update одной таблицы из другой не меняя те поля которые равны
    #32044232
KonstN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По идее, если поля равны, то после апдейта будет монописуально апдейтились они или нет. Подумай ещё раз нужно ли это. Выигрыша в скорости можно добиться только фильтруя записи, а не поля внутри записи.
Но если уж очень-преочень надо, то используй CASE.
...
Рейтинг: 0 / 0
Как сделать Update одной таблицы из другой не меняя те поля которые равны
    #32044235
Serg___
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Проблема не в скорости А в том что на таблице которую апдейтим стоит тригер и проверяет можно или нельзя изменять некоторые поля. А если поле меняется (даже на тоже значение) то тригер считает что поле изменилось (UPDATE(column) вернет True).
А как в Update использовать Case??

UPDATE MyTableIn SET
CASE WHEN MyTableIn.MyField1=MyTableOut.MyField1 THEN NULL ELSE MyTableIn.MyField1=MyTableOut.MyField1 END
from MyTableOut t where MyTableIn.Code=MyTableOut.Code

Такое не проходит а надо что то типа того.
...
Рейтинг: 0 / 0
Как сделать Update одной таблицы из другой не меняя те поля которые равны
    #32044243
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А сделать последовательно несколько UPDATE нельзя?

Т.е. сначала на те поля, которые обновляются обязательно, а следующий UPDATE на те поля, которые могут и не обновлятся и условие перевести в WHERE

Ну, и все это дело окружить транзакцией.

Еще вариант - это подправить вложенные триггеры и просто не запускать их если новое и старое значение поля одинаковое. Ну, примерно так:

IF UPDATE(MyField) AND
EXISTS(SELECT * FROM MyTable, Inserted WHERE MyTable.RecordID=Inserted.RecordID AND MyTable.MyField<>Inserted.MyField)
BEGIN
-- Здесь обработка тригерра
END

Да, тут я предполагаю, что MyField - это поле, изменение которого контролируется, а RecordID - это уникальный идентификатор записи
...
Рейтинг: 0 / 0
Как сделать Update одной таблицы из другой не меняя те поля которые равны
    #32044245
Sanek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а чего бы в тригере не проверять что изменилось , а что нет ?
и в зависимости от этого изменять поля ... :)
...
Рейтинг: 0 / 0
Как сделать Update одной таблицы из другой не меняя те поля которые равны
    #32044256
Фотография akuz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да пожалуй надо и апдейтить с кейсом и в триггере поля проверять. Что-то типа:

Код: plaintext
1.
2.
3.
4.
5.
6.
IF EXISTS(
  SELECT  1  
  FROM deleted d
    INNER JOIN inserted ON i.id = d.id
  WHERE ISNULL(i.field, 0 ) <> ISNULL(d.field, 0 )
    AND i.field >  5 )
  RAISERROR('Значение в поле не может быть больше 5', 16 , 1 )
...
Рейтинг: 0 / 0
Как сделать Update одной таблицы из другой не меняя те поля которые равны
    #32044266
KonstN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я имел в виду что-то типа
UPDATE MyTableIn SET
MyTableIn.MyField1 = CASE WHEN MyTableIn.MyField1 = MyTableOut.MyField1 THEN MyTableIn.MyField1 ELSE MyTableOut.MyField1 END
from MyTableOut t where MyTableIn.Code=MyTableOut.Code
только похоже, что тебе это не подходит тоже.
Вот только вопрос остался открытым, зачем тебе это надо?
...
Рейтинг: 0 / 0
Как сделать Update одной таблицы из другой не меняя те поля которые равны
    #32044267
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Serg___

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


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