2014-11-18 3 views
0

В настоящее время я работаю над написанием триггера для моей базы данных с таблицей employee и столбцом dno. Прежде чем писать триггер, я указал dno, чтобы иметь значение по умолчанию 1, а в триггере я хочу принудительно ввести значение по умолчанию, если значение в dno должно быть удалено.SQL - установка значения по умолчанию из триггера

Это то, что у меня есть до сих пор. Для меня это кажется довольно простым, но я чувствую, что мне не хватает многого.

create trigger empdeptfk_delete 
on employee 
after delete as 
begin 
update employee 
set dno = 1 
end 

Есть ли способ, что я могу написать set default value вместо set dno = 1? Кроме того, я использую SQL Server 2012, если это помогает. Благодаря!

+0

Вы должны обработать триггер обновления (а не удалить) таблицы employee, если вы хотите поймать только изменения значения поля «dno». –

+0

В чем разница? – Delfino

+0

Если вы собираетесь удалить одну запись из таблицы сотрудников, тогда поле уже исчезло! Вы упомянули, что если значение столбца будет удалено, вы хотите, чтобы оно имело значение 1, поэтому вам нужно обработать триггер обновления таблицы employee, чтобы установить значение поля dno равным 1, я отправлю ответ в ближайшее время. –

ответ

1

Вы должны обрабатывать триггер обновления вместо триггера delete, потому что вам нужно поймать, когда обновляется поле dno.

Вот код:

CREATE TRIGGER empdeptfk_update ON employee 
    INSTEAD OF UPDATE 
AS 
    BEGIN 
     IF UPDATE(dno) 
      BEGIN 

       DECLARE @DNO INT 
       SELECT @DNO = dno 
       FROM Inserted 

       IF @DNO IS NULL 
        SET @DNO = 1 

       UPDATE employee 
       SET  employee.dno = @DNO 
       FROM Inserted 
       WHERE Inserted.employeeID = employee.employeeID 

      END 
    END 
+0

Я попробовал приведенный выше код, а затем попытался обновить некоторые кортежи в 'employee', но успешно установил' dno' значение null. У меня есть 'update employee set dno = null где lname = 'smith'', где lname - это фамилия какого-либо человека в таблице employee. – Delfino

0

Сначала нужно создать «триггер перед удалением», а затем сделать обновление DNO = 1, а затем выполнить удаление.

+0

фактически до = вместо –

Смежные вопросы