|
|
|
новичок
      
участник
Last Login: 22.08.2005 15:45
Сообщ.: 3,
Visits: 34
|
|
Интересно ваше мнение по поводу следующего
На данный момент стандарт SQL-3 (SQL-2 c PSM) предусматривает создание триггеров (событие + действия). В моем понимании это реакция на результат того или иного изменения данных.
Почему разработчики СУБД не позволяют реагировать на конкретную выполненную инструкцию SQL. Ну например, как вариант, если бы была системная таблица, в которую всавлялась бы очередная выполненная инструкция. Понятно, что существует много ситуаций, когда нужно реагировать на результат (ведь к одному и тому же рузультату могут привести различные инструкции), но на мой взгляд существуют и другие ситуации, когда нужна реакция именно на конкретную инструкцию. Другими словами, когда событие - это выполлнение инструкции SQL (например, когда необходимо отличать какая инструкция привела к данному результату).
|
|
|
|
|
Supreme Being
      
участник
Last Login: 25.06.2006 12:18
Сообщ.: 337,
Visits: 3 698
|
|
| Вы сами-то поняли, что хотели сказать?... Я не понял. Хотя вроде не дурак.
|
|
|
|
|
новичок
      
участник
Last Login: 22.08.2005 15:45
Сообщ.: 3,
Visits: 34
|
|
Пример для всех - я так понимаю решение невозможно в рамках РСУБД
Есть 2 совсем разных, предназначенных для решения своих локальных задач приложения, и работающих на MS SQL и DB2 и у которых есть import/export. В первом приложении есть форма и пользователь добавляет данные инструкцией INSERT INTO Sotrudnik (Id,Sotr_FIO) VALUES (1,''Иванов C.И.'') (ну то есть есть форма на которой вводятся данные и user нажимает кнопку добавить). В том же приложении иногда делается import документов, которые добавляются инструкцией INSERT INTO Sotrudnik (Id,Sotr_name) SELECT * FROM TEMP1 (ну там создается дополнительная таблица на сервере и потом все одной инструкцией в базу - не знаю для чего, наверно зачем-то нужно). Подвергать изменениям код приложений нельзя и перепроектировать что-то то же.
Далее - надо реализовать следующую логику (она может быть различной - для этого конкретного примера - такой)
1) Если это INSERT INTO Sotrudnik (Id,Sotr_FIO) VALUES (1,''Иванов C.И.'') то добавить это ФИО в таблицу на другом сервере DB2 для второго приложения
2) Если это INSERT INTO Sotrudnik (Id,Sotr_FIO) SELECT * FROM TEMP1 то также все их добавить + дополнительно в отдельное поле ''Notes'' на втором сервере дописать ''import'' для каждой записи.
Итак триггер на INSERT - дальше как отличить одну форму (синтаксис) инструкции которая приходит на сервер от другой невозможно в рамках рсубд ???
|
|
|
|
|
Supreme Being
      
участник
Last Login: 29.09.2007 22:12
Сообщ.: 343,
Visits: 3 388
|
|
| А "взводить" какую-нибудь переменную нельзя ? В том или ином случае? проблема, мне кажется, надумана...
|
|
|
|
|
Supreme Being
модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240,
Visits: 65 445
|
|
| Можно проверять существуют ли вставляемые записи (из таблицы Inserted) в таблице Temp1.
|
|
|
|
|
новичок
      
участник
Last Login: 22.08.2005 15:45
Сообщ.: 3,
Visits: 34
|
|
2 vpanasenko
А "взводить" какую-нибудь переменную нельзя ? В том или ином случае? проблема, мне кажется, надумана...
ну как ее "взводить" - поясните. Код приложений модифицировать нельзя. Триггер на Insert - результат и для 1 и для 2 инструкции одинаков. Разве что проверять количество записей при вставке - если одна - то скорее это 1, если сразу больше - то 2-ая инструкция. Но где гарантия что импортироватся будет не одна запись ?
Надуманность - объсните что вы имеете ввиду
2 bazile
"Можно проверять существуют ли вставляемые записи (из таблицы Inserted) в таблице Temp1. "
Ну таблица Temp1 - временная и создает ее приложение на сервере. Вопрос - как проверять ?
|
|
|
|
|
Supreme Being
модератор
Last Login: 04.05.2008 13:32
Сообщ.: 7 240,
Visits: 65 445
|
|
[quote="dima_9"]Ну таблица Temp1 - временная и создает ее приложение на сервере. Вопрос - как проверять ?[/quote]
if object_id(''temp1'') is not null
begin
-- Таблица temp1 существует
end
|
|
|
|