不想人工干预地自动执行存储过程?当目的表发生变动时自动执行相应的存储过程?
不想人工干预地自动执行存储过程?当目的表发生变动时自动执行相应的存储过程?本存储过程就是提供这样一个方法…… /** * 关于: MS SQL Server 2000 触发器调用存储过程 * 作者:彭建军 * 测试环境:SQL Server 2000 SP4 + Windows XP Sp2 * 更新时间:2006-7-8 16:36 **/ --创建测试环境 USE Master GO IF EXISTS (SELECT NAME FROM SYSOBJECTS WHERE XTYPE = 'U' AND NAME = '卷烟销售表') DROP TABLE 卷烟销售表 GO IF EXISTS (SELECT NAME FROM SYSOBJECTS WHERE XTYPE = 'U' AND NAME = '卷烟库存表') DROP TABLE 卷烟库存表 GO IF EXISTS (SELECT NAME FROM SYSOBJECTS WHERE XTYPE = 'TR' AND NAME = 'Insert_卷烟销售表') DROP TRIGGER Insert_卷烟销售表 GO IF EXISTS (SELECT NAME FROM SYSOBJECTS WHERE XTYPE = 'P' AND NAME = 'P_减少卷烟库存') DROP PROCEDURE P_减少卷烟库存 GO CREATE TABLE 卷烟销售表 ( RecordId INT IDENTITY(1,1) PRIMARY KEY NOT NULL, 卷烟品牌 VARCHAR(40), 购货商 VARCHAR(40), 销售数量 INT, 销售单价 MONEY, 销售金额 MONEY ) GO CREATE TABLE 卷烟库存表 ( RecordId INT IDENTITY(1,1) PRIMARY KEY NOT NULL, 卷烟品牌 VARCHAR(40), 库存数量 INT, 库存单价 MONEY, 库存金额 MONEY ) GO --建立存储过程 CREATE PROCEDURE P_减少卷烟库存 @卷烟品牌 VARCHAR(40) AS BEGIN TRANSACTION DECLARE @库存数量 FLOAT DECLARE @销售数量 FLOAT SELECT @库存数量 = 库存数量 FROM 卷烟库存表 WHERE 卷烟品牌 = @卷烟品牌 SELECT @销售数量 = 销售数量 FROM 卷烟销售表 WHERE 卷烟品牌 = @卷烟品牌 --参数检查 IF (@卷烟品牌 IS NULL OR @卷烟品牌 = '') BEGIN RAISERROR('错误!缺少参数 @卷烟品牌 ,请检查!',16,1) ROLLBACK RETURN END IF (@库存数量 < @销售数量) BEGIN RAISERROR('错误!库存不足,无法销售! ,请检查!',16,1) ROLLBACK RETURN END --数据处理 UPDATE 卷烟库存表 SET 库存数量 = 库存数量 - @销售数量,库存金额 = (库存数量 - @销售数量)*库存单价 WHERE 卷烟品牌 = @卷烟品牌 SELECT 1 COMMIT TRANSACTION GO --建立触发器 --卷烟销售后,系统自动减少相应的卷烟库存 --触发器内调用存储过程 CREATE TRIGGER Insert_卷烟销售表 ON 卷烟销售表 FOR INSERT AS BEGIN TRANSACTION --数据完整性检查 UPDATE 卷烟销售表 SET 销售金额 = 销售数量 * 销售单价 WHERE RecordId IN (SELECT RecordId from INSERTED) DECLARE @卷烟品牌 VARCHAR(40) SELECT @卷烟品牌 = 卷烟品牌 FROM INSERTED --调用存储过程 EXEC P_减少卷烟库存 @卷烟品牌 SELECT 1 COMMIT TRANSACTION GO --数据测试 INSERT INTO 卷烟库存表 SELECT '红河88',100,9,900 UNION ALL SELECT '红河99',100,10,1000 GO INSERT INTO 卷烟销售表 SELECT '红河88','杨亮',10,9,90 GO INSERT INTO 卷烟销售表 SELECT '红河99','陈再发',20,10,200 GO --结果 SELECT * FROM 卷烟库存表 SELECT * FROM 卷烟销售表 --删除测试环境 DROP TABLE 卷烟库存表 GO DROP TABLE 卷烟销售表 GO 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/pengjj/archive/2006/07/08/893694.aspx