怎么使用sql触发器
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,本篇文章给大家分享的是有关怎么使用sql触发器,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。sql中的触发器是对某个表进行操作时而触发的
千家信息网最后更新 2025年11月07日怎么使用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安全错误
数据库的锁怎样保障安全
数字货币服务器提示无法连接
方舟电脑版pvp服务器
网络安全专业未来前景
小皮怎么链接数据库
红网网络安全工作室
监测数据如何接入数据库
桂阳学计算机软件开发学费
收看网络安全教育片开展情况
网络安全班级讨论
太原网络安全工程师自学
网络安全常用关键技术有
危险视频剪辑软件开发
河南二手服务器回收
近期网络安全宣传片
关于车载网络技术的书
国外服务器IFVOD
北京定位软件开发
阿里的关系型数据库
普通人可以学软件开发吗
概要设计 数据库设计
原神 ps 无法登陆服务器
软件开发专业t
自考本科计算机网络技术样题
从政治高度认识网络安全
学计算机网络技术以后会做什么
用服务器挖门罗币一天收益
嵌入式软件开发面试算法编程
广电网络技术员述职
王者荣耀账号一直显示服务器中
广东交友软件开发价格表