2015-06-11 2 views
1

Я пишу триггер DML, когда изменение (обновление или вставка) происходит в одной таблице (основная таблица), я хочу написать всю строку в другую таблицу (таблица Delta) , Таблицы Master и Delta содержат один и тот же столбец с одинаковым типом данных, за исключением того, что таблица Delta содержит дополнительный столбец с именем «change_type», который должен указывать либо «INSERT», либо «MODIFY», в зависимости от того, какой триггер обновляет таблицу дельты.FIM - SQL Триггеры для обновления записей в таблице Delta

Трудность, с которой я столкнулся, - это использовать вставленную таблицу для обновления строки таблицы Delta, но она дает мне ошибки.

CREATE TRIGGER [dbo].[TR_Update] 
    ON [dbo].[People_Master] 
    AFTER Update 
AS 
BEGIN 
-- SET NOCOUNT ON added to prevent extra result sets from 
-- interfering with SELECT statements. 
SET NOCOUNT ON; 

Declare @RowCount int 
Declare @ID int 
Declare @Email nvarchar(50) 
Declare @ct nvarchar(10) 

select @ID = ID from inserted 


Select @RowCount=COUNT(*) from People_Delta where People_Delta.ID = @ID and People_Delta.change_type = 'Modify'; 

if(@RowCount = 0) 
Begin 
    Insert into People_Delta (ID,Email,uac,Department,FirstName,change_type) 
    values (iserted.ID,inserted.Email,inserted.uac,inserted.Department,inserted.Firstname'Modify'); 
END 

END 
GO 

В моем столе 5 колонн.

ID (primary key) 
Email 
Firstname 
uac 
Department 

ответ

0

Вы пропускаете , в вашем INSERT заявлении.

И поскольку количество указанных столбцов не совпадает с количеством введенных значений, вы получаете сообщение об ошибке.

inserted.Firstname , 'Изменить'

Insert into People_Delta (ID,Email,uac,Department,FirstName,change_type) 
    values (iserted.ID,inserted.Email,inserted.uac,inserted.Department,inserted.Firstname,'Modify'); 
+0

Большое спасибо – gtrivedi