SQL Server 2008 - Справка, пишущая простой Триггер ВСТАВКИ

Там эта библиотека: http://dicom.offis.de/dcmtk

23
задан gbn 31 August 2009 в 05:45
поделиться

2 ответа

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

Итак, чтобы вставить пары Сотрудник / Отдел, которые в настоящее время не существуют, вы можете попробовать что-то вроде следующего.

CREATE TRIGGER trig_Update_Employee
ON [EmployeeResult]
FOR INSERT
AS
Begin
    Insert into Employee (Name, Department) 
    Select Distinct i.Name, i.Department 
    from Inserted i
    Left Join Employee e
    on i.Name = e.Name and i.Department = e.Department
    where e.Name is null
End
67
ответ дан 29 November 2019 в 00:40
поделиться

cmsjr нашел правильное решение. Я просто хотел указать на пару моментов для вашего будущего развития триггера. Если вы используете оператор values ​​во вставке в триггер, существует большая вероятность того, что вы делаете неправильные вещи. Триггеры срабатывают один раз для каждого пакета вставленных, удаленных или обновленных записей. Таким образом, если десять записей были вставлены в один пакет, то триггер срабатывает один раз. Если вы ссылаетесь на данные во вставленных или удаленных и используете переменные и предложение значений, то вы получите данные только для одной из этих записей. Это вызывает проблемы с целостностью данных. Вы можете исправить это, используя вставку на основе набора, как показано в cmsjr выше, или с помощью курсора. Никогда не выбирайте путь курсора. Курсор в триггере - это ожидающая своего появления проблема, поскольку они медленные и могут заблокировать вашу таблицу на несколько часов. Я удалил курсор из триггера один раз и улучшил процесс импорта с 40 минут до 45 секунд.

Вы можете подумать, что никто никогда не собирается добавлять несколько записей, но это происходит чаще, чем думает большинство людей, не связанных с базами данных. Не пишите триггер, который не будет работать при всех возможных условиях вставки, обновления и удаления. Никто не будет использовать метод одной записи за раз, когда им нужно импортировать 1000000 записей о целевых продажах от нового клиента или обновить все цены на 10% или удалить все записи у поставщика, продукты которого вы больше не продаете.

Вы можете подумать, что никто никогда не собирается добавлять несколько записей, но это происходит чаще, чем думает большинство людей, не использующих базы данных. Не пишите триггер, который не будет работать при всех возможных условиях вставки, обновления и удаления. Никто не будет использовать метод одной записи за раз, когда ему нужно импортировать 1000000 записей о продажах от нового клиента или обновить все цены на 10% или удалить все записи у поставщика, продукты которого вы больше не продаете.

Вы можете подумать, что никто никогда не собирается добавлять несколько записей, но это происходит чаще, чем думает большинство людей, не использующих базы данных. Не пишите триггер, который не будет работать при всех возможных условиях вставки, обновления и удаления. Никто не будет использовать метод одной записи за раз, когда ему нужно импортировать 1000000 записей о продажах от нового клиента или обновить все цены на 10% или удалить все записи у поставщика, продукты которого вы больше не продаете.

000 целевых записей продаж от нового клиента, или обновить все цены на 10%, или удалить все записи от поставщика, продукты которого вы больше не продаете.

000 целевых записей продаж от нового клиента или обновить все цены на 10% или удалить все записи от поставщика, продукты которого вы больше не продаете.

27
ответ дан 29 November 2019 в 00:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: