delete from shopclass where parentid in (select id from deleted)parentid保存他父级的id
解决方案 »
- 解决 速度上分 小问题 求时间差 在线等
- 用 vb开发mis系统,操作数据库的代码是放在服务器上的存贮过程好呀?还是放在vb代码中好呀?
- 利用OpenFileDialog打开SQL数据库即mdf文件时,提示该文件正在使用,该怎么解决?
- sql server 事务中语句有执行错误,为什么提交后正确执行的语句还是有效的?
- 如何编写这样的存储过程?
- sql数据按月叠加?
- 怎么样将三将表中内容join起来
- 97备份在2k下导入问题
- ★★★各位大虾救命,怎样在SQL Server里执行存储过程,并把其返回的结果集保存为视图!!!
- 一个比较难的统计问题?具体请看
- 去掉“空格”问题[疑惑的很]
- 求一添加列的sql语句
当前数据库中有“uMateriel”和“uRecord”两张表,他们分别用来保存物品信息和物品的出入库记录信息,结构如下
引用:
uMateriel
----------------
mId int
mName nvarchar(40)
mNum int DEFAULT 0uRecord
----------------
rId int
mId int
rNum int
rDate datetime DEFAULT GetDate()
rMode bit DEFAULT 0好了,数据表已经有了,现在看一下实际的应用。
现在,我们要购入物品A,数量100,时间为当天,已知物品A的编号为1,那么通常我们需要做以下两个步骤:
引用:
1、在 uRecord 记录表中增加一条物品A的购入记录:
INSERT INTO uRecord (mId, rNum, rMode) VALUES (1, 100, 0)
2、更新 uMateriel 物品库存表中物品A的数量:
UPDATE uMateriel SET mNum = mNum + 100 WHERE mId=1
现在根据上面的语法我们建立一个触发器(注意一点,触发器是附于一张表或视图的,所以只能在表里建立或在查询分析器里建立),这个触发器的功能就是自动更新库存数量--------------------------------------------------------------------------------
引用:
CREATE TRIGGER [trUpdateMaterielNum] ON [dbo].[uRecord]
-- 表明在插入记录之后执行这个触发器
AFTER INSERT
AS
-- 当前更新的编号
DECLARE @intID int
-- 当前更新的数量
DECLARE @intNum int
-- 当前模式
DECLARE @intMode int
-- 判断是否有记录录被更新,@@ROWCOUNT是系统函数,返回受上一语句影响的行数。
IF @@ROWCOUNT >0
BEGIN
-- 取得当前插入的物品编号和数量,Inserted 表用于存储 INSERT 和 UPDATE 语句所影响的行的副本。
SELECT @intID=mId,@intNum=rNum,@intMode=rMode FROM Inserted -- 判断当前模式(0为入库,1为出库)来更新当前物品的数量
IF @intMode = 0
UPDATE uMateriel SET mNum = mNum + @intNum WHERE mId=@intID
ELSE
UPDATE uMateriel SET mNum = mNum - @intNum WHERE mId=@intID
END