инициировать вставки в одну таблицу - PullRequest
1 голос
/ 25 января 2009

В моей базе данных много таблиц, которые взаимосвязаны. У меня есть таблица (таблица первая), в которую были вставлены данные и идентификатор автоматически увеличивается. Как только у этой строки есть идентификатор, я хочу вставить его в таблицу (таблицу три) с другим набором идентификаторов, который поступает из формы (эти данные также будут поступать в таблицу, так что они могут быть из этой таблицы) как данные, поступившие в первую таблицу.

Два идентификатора вместе составляют первичный ключ третьей таблицы.

Как я могу это сделать, чтобы показать, что более одного идентификатора соединено с одним идентификатором для чего-то еще.

Спасибо.

Ответы [ 2 ]

1 голос
/ 25 января 2009

Вы не можете сделать это с помощью триггера, так как триггер имеет в своем распоряжении только те данные, которые вы уже вставили, а не данные, которые являются текущими только в вашем пользовательском интерфейсе.

Обычно вы справляетесь с этой ситуацией, когда вы пишете сохраненный процесс, который вставляет собрание, возвращает значение идентификатора (используя scope_identity () в SQL Server, но я уверен, что в других базах данных есть метод для возврата автоматически сгенерированного я тоже) Затем вы использовали бы это значение для вставки в другую таблицу с другими значениями, необходимыми для этой таблицы. Вы, конечно, хотите заключить все это в транзакцию.

0 голосов
/ 25 января 2009

Я думаю, что вы, вероятно, можете делать то, что вы описываете (просто запишите INSERT в таблицу 3) в триггере таблицы 1), но вам придется поместить дополнительную информацию для строк таблицы 3 в строку таблицы 1, что не очень умно.

Я не могу понять, почему вы сделали бы это вместо того, чтобы писать INSERT в своем коде, где кто-то, читающий его, может видеть, что происходит.

Проблема с триггерами заключается в том, что они упрощают скрытие бизнес-логики в базе данных. Я думаю (и я полагаю, что я в большинстве своем здесь), что легче понять, управлять, поддерживать и в целом иметь дело с приложением, в котором все бизнес-правила существуют в одной общей области.

Есть причины использовать триггеры (например, для распространения денормализованных значений) так же, как есть причины для использования хранимых процедур. Я собираюсь утверждать, что они в значительной степени связаны с областями, критически важными для производительности. Или должно быть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...