【问题标题】:FIM - SQL Triggers for updating records in Delta tableFIM - 用于更新 Delta 表中记录的 SQL 触发器
【发布时间】:2015-08-27 00:23:02
【问题描述】:

当一个表(主表)发生更改(更新或插入)时,我正在编写一个 DML 触发器,我想将整行写入另一个表(增量表)。 Master 和 Delta 表包含具有相同数据类型的同一列,除了 Delta 表包含一个名为“change_type”的附加列,它应该是“INSERT”或“MODIFY”,具体取决于哪个触发器正在更新 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

【问题讨论】:

    标签: sql triggers dml


    【解决方案1】:

    您的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');
    

    【讨论】:

      猜你喜欢
      • 2017-07-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-15
      • 1970-01-01
      相关资源
      最近更新 更多