触发器应用实例 返回当前数据库表格中的表格名称和触发器名称

本文深入探讨了SQL触发器的创建与使用,包括在不同场景下如何维护数据一致性,如更新和插入操作。通过具体实例,展示了触发器如何在客户往来账表中自动更新期初数和期末数,以及在收费客户表中处理提交标志变更时的数据同步。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

use testdb

select * from sys.tables   ---所有用户自定义的表
select * from sysobjects   where xtype='tr'  ----返回当前数据库的所有的触发器


select t.name  tablename,s.name triggername from sys.tables  t
    join sysobjects  s on  t.object_id =s.parent_obj
    where xtype=N'tr'
    order by t.name
/*返回当前数据库表格中的表格名称和触发器名称*/
 

  sp_helptext 'gcheckU'   ---查看指定触发器的内容

 

1、数据一致性

USE testdb
GO

SET QUOTED_IDENTIFIER ON
GO

 


create  TRIGGER [dbo].[gCustomerU] ON [dbo].[tCustomer] 
FOR UPDATE 
AS
Begin
Set NoCount On
--更新往来帐目表的期初数
If Update(fOriginSum) or Update(fRemain)
    Update a set a.fPaySum=i.fOriginSum,a.fRemain=i.fRemain
        from tAccountC a,Inserted i where a.fCustomerID=i.fID

Set NoCount On
End

Create TRIGGER [dbo].[gCustomerI] ON [dbo].[tCustomer] 
FOR INSERT
AS
Begin
Declare @Date Datetime
Set NoCount On

Set @Date=dbo.fuser_formatDate(Getdate())

--在客户往来帐表中插如相应记录
    Insert Into tAccountC(fCustomerID,fLastDate,fPaySum,fRemain)
        Select fID,@Date,fOriginSum,fRemain from Inserted
Set NoCount Off
End

 

USE [ClothingTem]
GO
/****** Object:  Trigger [dbo].[gChargeCustomerU]    Script Date: 10/22/2019 19:56:56 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

 

CREATE  TRIGGER [dbo].[gChargeCustomerU] ON [dbo].[tChargeCustomer] 
FOR UPDATE
AS
Begin
Set NoCount On
Declare @OldSubmitFlag bit,@NewSubmitFlag bit

if Update(fSubmitFlag)
begin
Select @OldSubmitFlag=fSubmitFlag from Deleted
Select @NewSubmitFlag=fSubmitFlag from Inserted
if (@OldSubmitFlag=0) and (@NewSubmitFlag=1)
begin
    update a set a.fPaySum=a.fPaySum+I.fSum
        from tAccountC a,Inserted I
        where a.fCustomerID=I.fCustomerID

    --记入往来帐
    Insert Into tCustomerAccountIO(fDate,fCustomerID,fType,fOrderNO,fDescription,fIncSumPrice,fPaySum,fRemain)
        Select GetDate(),I.fCustomerID,3,I.fNO,I.fDescription,I.fSum,a.fPaySum,a.fRemain
        from Inserted I,tAccountC a
        Where i.fCustomerID=a.fCustomerID       
end
end
end

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值