2013-03-25 1 views
2

У меня есть таблица EmployeeКак получить обновляя строку ID в триггере сервера SQL

Emp_Id Name 
    1  XYZ 
    2  ABC 

и другой таблица DivisionInfo

DivisionID Division Emp_Id 
     1  mmm   1 
     2  nnnn   1 
     3  oooo   1 

Мне нужно написать триггер для отката обновления на Employee таблиц, если Emp_Id присутствует в таблице DivisionInfo. В этом случае Emp_Id = 1.

Как получить идентификатор строки строки, обновляемой в триггере SQL?

Это мой триггер код:

ALTER TRIGGER [dbo].[EmployeeTrigger] 
ON [dbo].[Employee] 
FOR UPDATE 
AS 
    IF((SELECT COUNT([DivisionID ]) 
     FROM [DivisionInfo] AS D 
     INNER JOIN Employee AS E ON D.[Emp_Id] = E.Emp_Id 
     WHERE D.[Emp_Id] = E.Emp_Id) > 0) 
    BEGIN 
     RAISERROR ('Testing', 10, 1); 
     ROLLBACK TRANSACTION 
     RETURN 
    END 

Вот это всегда верно

+0

Я нахожу это странным, что если вы хотите, чтобы обновить имя сотрудников, вы не может это сделать, если он назначен подразделению. – HLGEM

ответ

1

Попробуйте это:

ALTER TRIGGER [dbo].[EmployeeTrigger] 
ON [dbo].[Employee] 
FOR UPDATE 
AS 
IF((
    SELECT COUNT([DivisionID ]) 
    FROM [DivisionInfo] D 
    JOIN INSERTED I ON I.[Emp_Id] = D.[Emp_Id])>0) 
BEGIN 
     RAISERROR ('Testing', 10, 1); 
    ROLLBACK TRANSACTION 
    RETURN 
END 
+0

Спасибо за быстрый ответ. Это сработало – Somashekhar

+1

Вам нужно понять одну вещь о триггере, вы НИКОГДА не предполагаете, что обрабатывается только одна запись. Поэтому вы не думаете, что обновите идентификатор строки строки, обновите миллионы строк. В настоящий момент триггер будет откатывать все записи, если какой-либо из них находится в таблице данных раздела и если вы получаете обновление с несколькими записями, некоторые из которых находятся в таблице Раздела, а некоторые из них - нет, возможно, это не то, что вы хотите. Вам всегда нужно планировать (и проверять) несколько обновлений записей в триггере. – HLGEM

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