|
|
|
Как сделать Update одной таблицы из другой не меняя те поля которые равны
|
|||
|---|---|---|---|
|
#18+
Как сделать Update одной таблицы из другой соедененных по первичному ключу не апдейтя те поля которые равны в таблицах. Нужно потому что на таблицу которую изменяем стоит тригер который запрещает менять некоторые поля при определенных условиях. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2002, 12:00:27 |
|
||
|
Как сделать Update одной таблицы из другой не меняя те поля которые равны
|
|||
|---|---|---|---|
|
#18+
задать в JOIN-е все необходимые условия ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2002, 12:32:55 |
|
||
|
Как сделать Update одной таблицы из другой не меняя те поля которые равны
|
|||
|---|---|---|---|
|
#18+
Проблема не в соеденении А в том что если старое значение поля равно новому то поле не должно попасть в Update ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2002, 12:48:25 |
|
||
|
Как сделать Update одной таблицы из другой не меняя те поля которые равны
|
|||
|---|---|---|---|
|
#18+
...ON mytable1.id = mytable2.id AND mytable1.field1 <> mytable2.field1 .... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2002, 12:51:21 |
|
||
|
Как сделать Update одной таблицы из другой не меняя те поля которые равны
|
|||
|---|---|---|---|
|
#18+
Не подойдет (вся строка не проапдейтится) Мне надо чтобы не вся строка не апдейтилась а только те поля которые равны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2002, 12:56:05 |
|
||
|
Как сделать Update одной таблицы из другой не меняя те поля которые равны
|
|||
|---|---|---|---|
|
#18+
По идее, если поля равны, то после апдейта будет монописуально апдейтились они или нет. Подумай ещё раз нужно ли это. Выигрыша в скорости можно добиться только фильтруя записи, а не поля внутри записи. Но если уж очень-преочень надо, то используй CASE. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2002, 13:01:00 |
|
||
|
Как сделать Update одной таблицы из другой не меняя те поля которые равны
|
|||
|---|---|---|---|
|
#18+
Проблема не в скорости А в том что на таблице которую апдейтим стоит тригер и проверяет можно или нельзя изменять некоторые поля. А если поле меняется (даже на тоже значение) то тригер считает что поле изменилось (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 Такое не проходит а надо что то типа того. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2002, 13:09:29 |
|
||
|
Как сделать Update одной таблицы из другой не меняя те поля которые равны
|
|||
|---|---|---|---|
|
#18+
А сделать последовательно несколько 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 - это уникальный идентификатор записи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2002, 13:50:22 |
|
||
|
Как сделать Update одной таблицы из другой не меняя те поля которые равны
|
|||
|---|---|---|---|
|
#18+
а чего бы в тригере не проверять что изменилось , а что нет ? и в зависимости от этого изменять поля ... :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2002, 13:53:27 |
|
||
|
Как сделать Update одной таблицы из другой не меняя те поля которые равны
|
|||
|---|---|---|---|
|
#18+
Да пожалуй надо и апдейтить с кейсом и в триггере поля проверять. Что-то типа: Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2002, 14:20:41 |
|
||
|
Как сделать Update одной таблицы из другой не меняя те поля которые равны
|
|||
|---|---|---|---|
|
#18+
я имел в виду что-то типа 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 только похоже, что тебе это не подходит тоже. Вот только вопрос остался открытым, зачем тебе это надо? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.08.2002, 14:46:15 |
|
||
|
|

start [/forum/topic.php?fid=46&gotonew=1&tid=1821022]: |
0ms |
get settings: |
6ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
43ms |
get topic data: |
7ms |
get first new msg: |
5ms |
get forum data: |
2ms |
get page messages: |
33ms |
get tp. blocked users: |
1ms |
| others: | 195ms |
| total: | 305ms |

| 0 / 0 |
