SQL Server在INSERT和Update上创建触发器

ale*_*xtc 5 sql-server sql-server-2008-r2

我创建了一个包含以下列的表:ObservationId,FirstCreatedDate,description,......和SQL Server 2008 R2中的LastUpdatedDate.该ObservationId是1与增量的身份.

我需要创建两个触发器,一个用于INSERT,另一个用于UPDATE.在插入新记录时,INSERT触发器将通过获取当前日期时间来更新FirstCreatedDate列; 在更新现有记录时,UPDATE触发器将通过获取当前日期时间来更新LastUpdatedDate colunm.

我没有这样做,因为我猜测识别可能是问题所在.

有人能帮我一把吗?谢谢!

干杯,亚历克斯

ALTER TRIGGER [dbo].[T_InsertNewObservation] ON [dbo].[GCUR_OBSERVATION] 
  AFTER INSERT
AS 
BEGIN
  -- SET NOCOUNT ON added to prevent extra result sets from
  -- interfering with SELECT statements.
  SET NOCOUNT ON;

  -- Insert statements for trigger here
  UPDATE GCUR_OBSERVATION SET GCUR_OBSERVATION.FirstCreatedDate = getdate()
  FROM GCUR_OBSERVATION a INNER JOIN INSERTED ins ON a.ObservationId = ins.ObservationId

END
Run Code Online (Sandbox Code Playgroud)

Kan*_*ane 10

我认为你大多是正确的,但没有正确访问INSERTED或DELETED表.

ALTER TRIGGER [dbo].[T_InsertNewObservation] ON [dbo].[GCUR_OBSERVATION] 
  AFTER INSERT
AS 
BEGIN
  -- SET NOCOUNT ON added to prevent extra result sets from
  -- interfering with SELECT statements.
  SET NOCOUNT ON;

  -- get the last id value of the record inserted or updated
  DECLARE @id INT
  SELECT @id = [ObservationId]
  FROM INSERTED

  -- Insert statements for trigger here
  UPDATE GCUR_OBSERVATION 
  SET GCUR_OBSERVATION.FirstCreatedDate = GETDATE()
  WHERE [ObservationId] = @id 

END
Run Code Online (Sandbox Code Playgroud)

PS.希望这可以正常,因为我在记事本中写了它并没有测试它.