千家信息网

怎么使用sql触发器

发表于:2024-10-19 作者:千家信息网编辑
千家信息网最后更新 2024年10月19日,本篇文章给大家分享的是有关怎么使用sql触发器,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。sql中的触发器是对某个表进行操作时而触发的
千家信息网最后更新 2024年10月19日怎么使用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安全错误 数据库的锁怎样保障安全 国家网络安全人才标识 新吴区微型软件开发诚信经营 公司开发票大类软件开发 财务会计记账软件开发 华为企业网络技术员待遇 江苏医院时间频率同步服务器 为什么能上网但是打游戏就无法连接服务器 软件开发预研 万能钥匙要打开数据库 爱浦路网络技术(北京)有限公司 黎明杀机无法连接内容服务器 品牌服务器管理 smiteps4服务器维护 网络安全手抄报四年级小学生 mysql实时同步数据库 如何查看安卓数据库 公司月度网络安全报告 创建项目时数据库 宁德万云网络技术有限公司地址 数据库应用技术教程课后答案 先有原型还是先有数据库 软件开发项目中的经济决策 软件开发外包哪家最好用 杭州桌面软件开发总结 服务器提示不安全怎么办 渭南网络安全会议 广州四方网络技术有限公司 从事软件开发必须要学历吗 花店管理系统数据库安全设计 福建企业软件开发哪个好
0