如果表更新数据,则从其他表触发插入,如果日期时间> getdate,则触发返回插入

问题描述 投票:0回答:1

我从其他表更新后触发,下面的脚本正在运行。

但是如何添加脚本

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 tsql database-trigger
1个回答
0
投票

这里的第一个问题是您的触发器存在严重缺陷。如所指出的,它假定将永远只插入一行。 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中插入第二行,还是有时不插入行?如果您可以澄清要求,我很乐意为您提供帮助。

© www.soinside.com 2019 - 2024. All rights reserved.