我需要在插入后和更新后触发器创建。如果新行插入表中,它应该在插入触发器之后运行并将时间戳放在其他表中。但是如果再次编辑该行,它也应该更新另一个表。
状态可以更改为活动状态,待处理状态等。因此,当每个状态发生变化时,我需要输入时间戳。而对于每一个新纪录,我都需要投入新的一排。
这是表结构:
| ID | Name | Status |
|----|------|--------|
| 1 | xyz | Active |
| | | |
| | | |
假设这是插入表中的新行,因此应将其插入另一个表中。但是当我更改其状态时,它应该根据此ID更新另一个表。
| ID | Name | Active Staus | Other Status |
|----|------|--------------|--------------|
| 1 | xyz | TimeStamp | Time Stamp |
| | | | |
| | | | |`
USE [DemoDB]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[test_INSERT]
ON [dbo].[Demo]
AFTER INSERT
AS
BEGIN
SET NOCOUNT ON;
DECLARE ID BIGINT
Declare @status varchar(50)
SELECT @ID = INSERTED.ID
FROM INSERTED
INSERT INTO [dbo].[LogTble]
VALUES(@ID,'timestamp')
END
答案 0 :(得分:0)
嗯 - 你的触发器就在那里。
你假设 Inserted
中只有一行 - 这通常就是 NOT !如果您的INSERT
语句插入多行,Inserted
中会有多个条目,代码如下:
SELECT @ID = INSERTED.ID FROM INSERTED
会悲惨地失败......你会选择一个仲裁行 - 而其他所有行都会被忽略....
您需要注意Inserted
将包含多行,您需要相应地编写触发器 - 以基于集合的方式。
试试这个:
ALTER TRIGGER [dbo].[test_INSERT]
ON [dbo].[Demo]
AFTER INSERT
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO [dbo].[LogTble] (Id, ActiveStatus)
SELECT i.ID, SYSDATETIME()
FROM Inserted i
END