powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Тригер обновления внешнего ключа (связь один-ко-многим)
4 сообщений из 4, страница 1 из 1
Тригер обновления внешнего ключа (связь один-ко-многим)
    #32006531
Guru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дано:
Классическая связь один ко многим:
две таблицы:

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 - новый. Других ключей у меня нет.
Может я чего-то не догоняю и вообще не в ту степь залез?
...
Рейтинг: 0 / 0
Тригер обновления внешнего ключа (связь один-ко-многим)
    #32006534
zamm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Насколько я понимаю, в 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
...
Рейтинг: 0 / 0
Тригер обновления внешнего ключа (связь один-ко-многим)
    #32006536
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще-то на то он и ключ что не должен меняться.

Если всё-таки хочется менять - то в общем случае в принципе невозможно(не связать что удалили и вставили). Если же есть условие что меняется только одна запись, то так, как предложил 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
...
Рейтинг: 0 / 0
Тригер обновления внешнего ключа (связь один-ко-многим)
    #32006538
Фотография Garya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Garya Привилегированный пользователь
Участник
А в SQL2K достаточно галочку на свойствах DRI поставить... И никаких триггеров не нужно!
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Тригер обновления внешнего ключа (связь один-ко-многим)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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