SQL 触发器(create、alter)

本文介绍了如何使用SQL触发器实现数据库表之间的数据同步,包括插入、删除和更新操作。触发器在K3系统中用于采购订单管理,例如在新增采购订单时自动调整物料数量,修改备注时更新订单日期。此外,还展示了防止删除每天首单的保护机制,确保业务数据的完整性和一致性。
摘要由CSDN通过智能技术生成

示例
1、insert

表bai1 (ID,NAME)2 (ID,NAME)
当用户插入表1数据后du,表2也被插入相同zhi的数据
CREATE TRIGGER TRI1
ON1
FOR INSERT
AS
BEGIN 
INSERT INTO2 SELECT * FROM INSERTED
END
GO

2、delete

1 (ID,NAME)2 (ID,AGE,GENDER)
当用户删除表1某条baiID的数据后,表2相应ID的数据也被删除 
CREATE TRIGGER TRI2 
ON1
FOR DELETE
AS
BEGIN 
DECLARE @id INT
SELECT @id FROM DELETED   
DELETE2 
WHERE ID = @id
END
GO

3、update

1 (ID,NAME)2 (ID,NAME)
当用户更改表1 NAME列数据后,表2相应ID的数据也同时更新
CREATE TRIGGER TRI3
ON1
FOR UPDATE
AS
IF UPDATE(NAME)
BEGIN
    UPDATE2
    SET A.NAME =  B.NAME
    FROM2 A, INSERTED B
    WHERE A.ID = B.ID
END
GO

1、K3界面新增采购订单,使用触发器把所有物料的采购数量改为原来的十倍。

create trigger TRI1
on POOrderEntry
after insert
as
begin
    update POOrderEntry
    set FAuxQty=FAuxQty*2
    where exists (
    select * from inserted where POOrderEntry.FInterID=inserted.FInterID
    )
end
go

2、K3界面修改采购订单的备注信息为:测试日期触发器,新增一个触发器为,当采购订单表头 备注 列 修改后把表头日期加十天。

create trigger TRI2
on POOrder
for INSERT
as
    if 1=((select 1 from inserted where fexplanation='测试日期触发器'))
    begin
        declare @date datetime
        select @date = dateadd(day,10,Fdate)
        from inserted
        begin
            update POOrder
            set Fdate=@date
            where
            FInterID = (select FInterID from inserted)
        end
    end
go

3、K3中 采购订单 每天做的第一张单子不允许删除

create trigger TRI3
on POOrder
instead of delete
as
begin
    declare @id int,
            @date datetime,
            @minidate datetime,
            @miniid int
    select @id=FInterID  from POOrder where FInterID=(select FInterID from deleted)
    select @date=FDate from POOrder where FInterID=(select FInterID from deleted)
    --select @id = FInterID from deleted
    --select @date = Fdate from deleted
    select @miniid =(select top 1 FInterID from POOrder where FDate=@date order by FInterID)
    if @miniid=@id
    begin
        raiserror('每天做的第一张单子不允许删除',16,1)
        rollback tran
    end
end
go
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

郑先生Ethan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值