Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
One_question Member Откуда: Украина, Донецк Сообщений: 61 |
У меня есть триггер который добавляет записи из функцииUSE [Аэропорт] GO /****** Object: Trigger [dbo].[Add_route] Script Date: 12/18/2012 08:37:33 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER TRIGGER [dbo].[Add_route] ON [Аэропорт].[dbo].[тРасписания] AFTER INSERT, UPDATE AS BEGIN INSERT INTO dbo.тРейсы (код_расписания, Время_вылета_факт, Время_прибытия_факт) SELECT dbo.DateList.kod, dbo.DateList.dt_in, dbo.DateList.dt_out FROM dbo.тРасписания r CROSS APPLY dbo.DateList(r.Период_с, r.Период_по, r.Код_расписания, r.Время_вылета_план, r.Время_прибытия_план) END Проблема в том что он добавляет все записи из функции каждый раз когда я добавляю/изменяю запись. Подскажите пожалуйста, как можно исправить эту проблему? |
18 дек 12, 10:40 [13647269] Ответить | Цитировать Сообщить модератору |
One_question Member Откуда: Украина, Донецк Сообщений: 61 |
Прошу прощения. Вопрос не корректен. Мне нужно чтобы он добавлял только ту запись, которая добавилась в таблицу или изменилась (при этом желательно изменять её в результирующей таблице, если это возможно) |
18 дек 12, 10:42 [13647284] Ответить | Цитировать Сообщить модератору |
Гость333 Member Откуда: Сообщений: 3683 |
One_question, Если у вас версия сервера 2008 и выше, то можно использовать MERGE |
18 дек 12, 10:47 [13647310] Ответить | Цитировать Сообщить модератору |
One_question Member Откуда: Украина, Донецк Сообщений: 61 |
Гость333, Спасибо. Сейчас разберусь с синтаксисом |
18 дек 12, 10:56 [13647347] Ответить | Цитировать Сообщить модератору |
чукча - не читатель!
Guest |
читайте про триггеры, особенно внимательно то место, где описаны псевдотаблицы inserted и deleted |
18 дек 12, 11:38 [13647628] Ответить | Цитировать Сообщить модератору |
PaulYoung Member Откуда: Москва Сообщений: 2565 |
|
||
18 дек 12, 11:47 [13647705] Ответить | Цитировать Сообщить модератору |
One_question Member Откуда: Украина, Донецк Сообщений: 61 |
Я сейчас и "пытаюсь с ними работать".. начала читать про MERGE но не могу понять как использовать ALTER TRIGGER [dbo].[Add_route] ON [Аэропорт].[dbo].[тРасписания] AFTER INSERT, UPDATE /*AS BEGIN INSERT INTO dbo.тРейсы (код_расписания, Время_вылета_факт, Время_прибытия_факт) SELECT dbo.DateList.kod, dbo.DateList.dt_in, dbo.DateList.dt_out FROM dbo.тРасписания r CROSS APPLY dbo.DateList(r.Период_с, r.Период_по, r.Код_расписания, r.Время_вылета_план, r.Время_прибытия_план) END /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// */ AS BEGIN SET NOCOUNT ON; MERGE dbo.тРейсы rou using (select код_расписания, Время_вылета_факт, Время_прибытия_факт from inserted) src ON rou.код_расписания = src.код_расписания WHEN NOT MATCHED THEN INSERT INTO dbo.тРейсы (код_расписания, Время_вылета_факт, Время_прибытия_факт) SELECT dbo.DateList.kod, dbo.DateList.dt_in, dbo.DateList.dt_out FROM dbo.тРасписания r CROSS APPLY dbo.DateList(r.Период_с, r.Период_по, r.Код_расписания, r.Время_вылета_план, r.Время_прибытия_план) WHEN MATCHED UPDATE SET rou.Время_вылета_факт = src.Время_вылета_факт END; GO Извините, да. Я плохо шарю в SQL Server, сейчас вставляю данные по примеру.. но моей логики недостаточно чтобы представить как оно должно выглядеть |
18 дек 12, 12:50 [13648094] Ответить | Цитировать Сообщить модератору |
чукча -читатель!
Guest |
чета типа этого...MERGE dbo.тРейсы rou using (select dl.kod, dl.dt_in, dl.dt_out, r.Время_вылета_факт , r.код_расписания from inserted r CROSS APPLY dbo.DateList(r.Период_с, r.Период_по, r.Код_расписания, r.Время_вылета_план, r.Время_прибытия_план) dl ) src ON rou.код_расписания = src.код_расписания WHEN NOT MATCHED THEN INSERT (код_расписания, Время_вылета_факт, Время_прибытия_факт) values (src.kod, src.dt_in, src.DateList.dt_out) WHEN MATCHED UPDATE SET rou.Время_вылета_факт = src.Время_вылета_факт END |
18 дек 12, 13:58 [13648582] Ответить | Цитировать Сообщить модератору |
One_question Member Откуда: Украина, Донецк Сообщений: 61 |
чукча -читатель!, В этом случае выбивает ошибку Сообщение 156, уровень 15, состояние 1, процедура Add_route, строка 14 Неправильный синтаксис около ключевого слова "UPDATE". И ругается еще на r.Время_вылета_факт - неверный синтаксис rou.Время_вылета_факт = src.Время_вылета_факт - не удалось выполнить привязку составного идентификатора и на неправильный синтаксис у UPDATE и SET |
18 дек 12, 20:40 [13650919] Ответить | Цитировать Сообщить модератору |
One_question Member Откуда: Украина, Донецк Сообщений: 61 |
чукча -читатель!, всё! Разобралась, работает ![]() |
18 дек 12, 21:55 [13651148] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |