Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности

Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
29.05.2001, 13:38
|
|||
|---|---|---|---|
|
|||
Тригер обновления внешнего ключа (связь один-ко-многим) |
|||
|
#18+
Дано: Классическая связь один ко многим: две таблицы: CREATE TABLE [dbo].[TABLE1] ( [PriKey] [char] (10) NOT NULL , [Data] [char] (10) NULL ) ON [PRIMARY] GO и CREATE TABLE [dbo].[TABLE2] ( [ForingKey] [char] (10) NOT NULL , [Data] [char] (10) NULL ) ON [PRIMARY] GO Теперь я пытаюсь написать тригер который бы обновил значение Table2..ForingKey при изменении Table1..PriKey CREATE TRIGGER TRIGGER1 ON TABLE1 FOR UPDATE AS UPDATE TABLE2 Set TABLE2.ForingKey=inserted.PriKey from TABLE2 Inner Join deleted on TABLE2.ForingKey=deleted.PriKey Inner Join Inserted On ?????????????????????????????????????????????? ????????????????????????????????????????????????????????????????????? Вопрос: По какому полю объединить мне inserted и deleted ? Ведь в Deleted ключ старый, а в inserted - новый. Других ключей у меня нет. Может я чего-то не догоняю и вообще не в ту степь залез? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
29.05.2001, 14:03
|
|||
|---|---|---|---|
|
|||
Тригер обновления внешнего ключа (связь один-ко-многим) |
|||
|
#18+
Насколько я понимаю, в TABLE1 поле PriKey должно являться уникальным (иначе связь один ко многим не получится), соответственно изменить ты можешь только одну запись, следовательно триггер будет работать только с одной записью и тебе не надо провязывать inserted и deleted. Тогда код может быть похожим на следующий CREATE TRIGGER TRIGGER ON TABLE1 FOR UPDATE AS declare @i1 int declare @i2 int select @i1=PriKey from deleted select @i2=PriKey from inserted UPDATE TAB2 Set ForingKey=@i2 where ForingKey=@i1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
29.05.2001, 14:30
|
|||
|---|---|---|---|
Тригер обновления внешнего ключа (связь один-ко-многим) |
|||
|
#18+
Вообще-то на то он и ключ что не должен меняться. Если всё-таки хочется менять - то в общем случае в принципе невозможно(не связать что удалили и вставили). Если же есть условие что меняется только одна запись, то так, как предложил zamm, я бы только чуть по-другому написал, но не суть: CREATE TRIGGER TRIGGER ON TABLE1 FOR UPDATE AS declare @i int select @i=count(*) from inserted if @i=0 return if @i<>1 rollback tran UPDATE TAB2 Set ForingKey=i.PriKey from TAB2 t, inserted i, deleted d where t.ForingKey=d.PriKey ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=46&tablet=1&tid=1826649]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
31ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
35ms |
get tp. blocked users: |
2ms |
| others: | 267ms |
| total: | 376ms |

| 0 / 0 |
