怎么使用sql触发器
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,本篇文章给大家分享的是有关怎么使用sql触发器,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。sql中的触发器是对某个表进行操作时而触发的
千家信息网最后更新 2026年11月01日怎么使用sql触发器
本篇文章给大家分享的是有关怎么使用sql触发器,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
sql中的触发器是对某个表进行操作时而触发的某种条件,可以用CREATE语句创建触发器,DROP语句删除触发器,ALTER语句禁用触发器等
触发器
在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序。触发器是一个特殊的存储过程。
CREATE TRIGGER tr_update_Stock --自动采购触发器ON T_ProductFOR updateASIF (update(Stock)) --判断stock字段是否更新BEGIN --查询出库存低于下限的产品近一个月的消耗量 --创建临时表 IF object_id('[tempdb].[dbo].##table1') IS NOT NULL --判断临时表#tmp是否存在,存在则删除 DROP TABLE ##table1 SELECT * INTO ##table1 FROM (SELECT row_number() OVER (ORDER BY ProductID) AS rowNo,c.ZNumber - c.Stock AS purchaseNum,* FROM ( SELECT ProductID,SUM(s.Numbers) ZNumber,p.Stock,SUM(s.OutMoney) ZMoney,p.Price FROM [dbo].[T_StorageOut] t inner join[dbo].[T_StorageRelation] s ON t.StorageOutID=s.StorageOutID inner join T_Product p ON s.ProductID=p.Id WHERE t.MakerTime between Convert(VARCHAR,DATEADD(MONTH,-1,GETDATE()),23) and Convert(VARCHAR,GETDATE(),23) and ProductID in (SELECT Id FROM V_ProductSupplierInfo where (Stock-StockLowerLimit)<0) GROUP BY ProductID,p.Stock,p.Price) c) ddd--计算用参数DECLARE @purchaseNum INT,@Price NVARCHAR(50),@totalMoney NVARCHAR(50),@ZpurchaseTotal INT --采购数量,单价,总金额,总数量SELECT @totalMoney = 0,@purchaseNum = 0,@Price = 0,@ZpurchaseTotal=0 --采购单所需参数 DECLARE @PurchaseNumber NVARCHAR(50),@DopurchaseId INT,@DopurchaseTime NVARCHAR(200),@PurchaseTotal INT,@PurchasePrice NVARCHAR(200),@PurchaseState INT,@PurchaseType INT SET @PurchaseNumber='JH'+replace(replace(replace(convert(VARCHAR,getdate(),120),'-',''),' ',''),':','') --进货单号JH20171031092322--采购单详情所需参数 (产品id,产品采购价格) DECLARE @StockProductId INT,@DPurchasePrice NVARCHAR(20)--循环用参数DECLARE @curIndex INT,@rowCount INT--判断用参数DECLARE @OTCount INT,@PTCount INT SET @curIndex = 1SELECT @rowCount = COUNT(1) FROM ##table1IF(@rowCount>0)BEGIN WHILE @curIndex <= @rowCount BEGIN --查询出第一行数据的采购数量,单价,产品id SELECT @purchaseNum = purchaseNum,@Price = Price,@StockProductId =ProductID FROM ##table1 WHERE rowNo = @curIndex --采购总金额 SET @totalMoney = @totalMoney + @purchaseNum * CONVERT (INT,@price) --采购总数量 SET @ZpurchaseTotal =@ZpurchaseTotal + @purchaseNum --单个产品的采购金额 SET @DPurchasePrice=@purchaseNum * CONVERT (INT,@price) IF object_id('[tempdb].[dbo].#PTable') IS NOT NULL --判断临时表#tmp是否存在,存在则删除 DROP TABLE #PTable IF object_id('[tempdb].[dbo].#OTable') IS NOT NULL --判断临时表#tmp是否存在,存在则删除 DROP TABLE #OTable --根据产品id查询出包含该产品的采购单已全部审批 SELECT * INTO #PTable FROM (SELECT PurchaseState FROM [dbo].[T_Purchase_Order] WHERE PurchaseNumber in(SELECT PurchaseOrderId FROM [dbo].[T_Purchase_OrderDetails] WHERE StockProductId=@StockProductId) and PurchaseState=0) AS a --根据产品id查询出包含该产品的订单已全部入库 SELECT * INTO #OTable FROM (SELECT OrderState FROM T_Order WHERE OrderNumber in(SELECT OrderNumber FROM T_OrderDetails WHERE ProductId=@StockProductId) and OrderState=0) AS c SELECT @PTCount = COUNT(1) FROM #PTable SELECT @OTCount = COUNT(1) FROM #OTable IF (@PTCount=0) --已全部审批 BEGIN IF(@OTCount=0) --=0表示包含该产品的订单均已入库,可以生成新的 BEGIN INSERT INTO [dbo].[T_Purchase_OrderDetails] VALUES(@PurchaseNumber,@StockProductId,@purchaseNum,@DPurchasePrice) END END SET @curIndex = @curIndex + 1 ENDEND set @DopurchaseId = 16646 --自动生成 set @DopurchaseTime=Convert(NVARCHAR,getdate(),23) --当前时间 2017-10-31 set @PurchaseTotal =@ZpurchaseTotal set @PurchasePrice =@totalMoney set @PurchaseState =0 --未审核 set @PurchaseType = 2 --自动生成 --变量赋值完成,对采购单做添加操作 IF (@PTCount=0) BEGIN INSERT INTO T_Purchase_Order VALUES(@PurchaseNumber,@DopurchaseId,@DopurchaseTime,@PurchaseTotal,@PurchasePrice,@PurchaseState,@PurchaseType) ENDEND这是一个自动采购的触发器,主要需要注意的触发条件,以及临时表的作用。
触发器的使用
创建触发器
CREATE TRIGGER tr_update_Stock
删除触发器
DROP TRIGGER tr_update_Stock
禁用
ALTER TABLE trig_example DISABLE TRIGGER trig1GO
恢复
ALTER TABLE trig_example ENABLE TRIGGER trig1GO
禁用某个表上的所有触发器
ALTER TABLE 你的表 DISABLE TRIGGER all
启用某个表上的所有触发器
ALTER TABLE 你的表 enable TRIGGER all
禁用所有表上的所有触发器
exec sp_msforeachtable 'ALTER TABLE ? DISABLE TRIGGER all'
启用所有表上的所有触发器
exec sp_msforeachtable 'ALTER TABLE ? enable TRIGGER all'
以上就是怎么使用sql触发器,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。
触发器
产品
采购
查询
条件
语句
生成
数量
更多
知识
篇文章
自动生成
订单
金额
实用
特殊
一行
下限
也就是
作用
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
新华互联网科技
互联网和科技技术
科技互联网公司装修
北京互联网科技有限公司
易互联网科技有限公司
互联网科技英文
安徽鑫晟辉互联网科技
撒么互联网科技公司
互联网科技股午盘股票涨跌
富国互联网科技创新基金
互联网校园科技培训
厦门比较好的科技互联网公司
开一家科技互联网公司需要多少钱
互联网科技的全部知识
互联网科技创新的路径
皮皮虾互联网科技有限公司
2021世界互联网领先科技成果发布
互联网科技接地气
恒生科技指数 中概互联网
科技互联网专业务虚会材料
科技创新与互联网经济
凡科互联网科技
壹账通互联网科技
广州凡科互联网科技
江苏南京365互联网科技
互联网科技革命什么开始
广州市恰铎互联网科技有限公司
银川新华互联网科技学校联系电话
互联网数据科技专业
易企秀互联网科技是做什么的