Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как сделать Update одной таблицы из другой не меняя те поля которые равны / 12 сообщений из 12, страница 1 из 1
19.08.2002, 12:00:27
    #32044209
Serg___
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать Update одной таблицы из другой не меняя те поля которые равны
Как сделать Update одной таблицы из другой соедененных по первичному ключу не апдейтя те поля которые равны в таблицах. Нужно потому что на таблицу которую изменяем стоит тригер который запрещает менять некоторые поля при определенных условиях.
...
Рейтинг: 0 / 0
19.08.2002, 12:32:55
    #32044220
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать Update одной таблицы из другой не меняя те поля которые равны
задать в JOIN-е все необходимые условия
...
Рейтинг: 0 / 0
19.08.2002, 12:48:25
    #32044226
Serg___
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать Update одной таблицы из другой не меняя те поля которые равны
Проблема не в соеденении
А в том что если старое значение поля равно новому то поле не должно попасть в Update
...
Рейтинг: 0 / 0
19.08.2002, 12:51:21
    #32044227
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать Update одной таблицы из другой не меняя те поля которые равны
...ON mytable1.id = mytable2.id
AND mytable1.field1 <> mytable2.field1 ....
...
Рейтинг: 0 / 0
19.08.2002, 12:56:05
    #32044231
Serg___
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать Update одной таблицы из другой не меняя те поля которые равны
Не подойдет (вся строка не проапдейтится)
Мне надо чтобы не вся строка не апдейтилась а только те поля которые равны.
...
Рейтинг: 0 / 0
19.08.2002, 13:01:00
    #32044232
KonstN
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать Update одной таблицы из другой не меняя те поля которые равны
По идее, если поля равны, то после апдейта будет монописуально апдейтились они или нет. Подумай ещё раз нужно ли это. Выигрыша в скорости можно добиться только фильтруя записи, а не поля внутри записи.
Но если уж очень-преочень надо, то используй CASE.
...
Рейтинг: 0 / 0
19.08.2002, 13:09:29
    #32044235
Serg___
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать Update одной таблицы из другой не меняя те поля которые равны
Проблема не в скорости А в том что на таблице которую апдейтим стоит тригер и проверяет можно или нельзя изменять некоторые поля. А если поле меняется (даже на тоже значение) то тригер считает что поле изменилось (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
19.08.2002, 13:50:22
    #32044243
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать Update одной таблицы из другой не меняя те поля которые равны
А сделать последовательно несколько 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
19.08.2002, 13:53:27
    #32044245
Sanek
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать Update одной таблицы из другой не меняя те поля которые равны
а чего бы в тригере не проверять что изменилось , а что нет ?
и в зависимости от этого изменять поля ... :)
...
Рейтинг: 0 / 0
19.08.2002, 14:20:41
    #32044256
akuz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать Update одной таблицы из другой не меняя те поля которые равны
Да пожалуй надо и апдейтить с кейсом и в триггере поля проверять. Что-то типа:

Код: 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
19.08.2002, 14:46:15
    #32044266
KonstN
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать Update одной таблицы из другой не меняя те поля которые равны
я имел в виду что-то типа
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
19.08.2002, 14:50:02
    #32044267
Genady
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как сделать Update одной таблицы из другой не меняя те поля которые равны
2 Serg___

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


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