我从其他表更新后触发,下面的脚本正在运行。
但是如何添加脚本
if @prt_datetime => getdate()
" record time on the field PRT_DATETIME >= getdate() "
触发返回插入到具有2条记录的表,但与PRT_DATETIME不同
declare @prt_event nvarchar(30)
declare @prt_desc nvarchar (80)
declare @prt_status nvarchar (4)
declare @prt_safety nvarchar(1)
declare @prt_date date
declare @prt_name nvarchar(50)
declare @prt_temp nvarchar(50)
declare @prt_class nvarchar(50)
declare @prt_event_org nvarchar(50)
declare @prt_datetime datetime
select @prt_event =(evt_code), @prt_desc=(evt_desc),@prt_status=(evt_status),@prt_safety=(evt_safety) ,
@prt_date=GETDATE() ,@prt_name='PTW',@prt_temp=(EVT_UDFCHAR01),@prt_class=(EVT_CLASS),@prt_event_org=(EVT_ORG),
@prt_datetime=getdate()
from inserted
if @prt_status='R' and @prt_safety='+' and @prt_temp is null
begin
insert into r1permit (PRT_EVENT,PRT_DESC,PRT_STATUS,PRT_SAFETY,PRT_DATE,PRT_NAME,PRT_CLASS,PRT_EVENT_ORG,PRT_DATETIME)
values (@prt_event,@prt_desc,@prt_status,@prt_safety,@prt_date,@prt_name,@prt_class,@prt_event_org,@prt_datetime)
end
这里的第一个问题是您的触发器存在严重缺陷。如所指出的,它假定将永远只插入一行。 sql server中的触发器每个操作触发一次,而不是每行触发一次。要处理此触发器,必须基于设置。这是您的触发器在基于集合的解决方案中的外观。请注意,根本没有任何变量。
insert into r1permit
(
PRT_EVENT
, PRT_DESC
, PRT_STATUS
, PRT_SAFETY
, PRT_DATE
, PRT_NAME
, PRT_CLASS
, PRT_EVENT_ORG
, PRT_DATETIME
)
select i.evt_code
, i.evt_desc
, i.evt_status
, i.evt_safety
, GETDATE()
, 'PTW'
, i.EVT_CLASS
, i.EVT_ORG
, GETDATE()
from inserted i
where i.evt_status = 'R'
and i.evt_safety = '+'
and i.EVT_UDFCHAR01 IS NULL
第二个问题不在您的问题中,而是在您声明的评论中:
如果PRT DATETIME> = 12小时getdate(),如何添加脚本,触发将记录重新输入到r1permit表中
目前尚不清楚。您是说要在r1permit中插入第二行,还是有时不插入行?如果您可以澄清要求,我很乐意为您提供帮助。