??? 触发器攻关 ??? 大哥大姐,帮帮忙啊!
小弟只知道触发器是个好东西,但是从来没有自己写过,
早就听说CSDN里是高手云集,藏龙卧虎之地,故来请教!
问题如下:
A表: 字段如下
规格单号 小号 节目名称 订货数量 完成
HLOT-07-0001 1 征服1 1000 False
HLOT-07-0001 2 征服2 1000 False
B表: 字段如下
规格单号 小号 节目名称 订货数量 入库数量
HLOT-07-0001 1 征服1 1000 1000
HLOT-07-0001 2 征服2 1000 800
B表中的 "入库数量 "会不断改变,如果 "入库数量> =订货数量 "
就表明 A表中的相应 "节目 "的 "完成 "字段要赋值为 "True ".
实现要求:
(1)触发器只对 "入库数量 "的INSERT,UPDATE时起作用
(2)B表的 "入库数量> =订货数量 "时自动更改相应A表 "完成=True "
------解决方案--------------------我也在想,要怎么获取到 INSERT 或 UPDATE 受影响的行的值.那这个问题就好解决了
------解决方案--------------------create trigger ti_B表 on B表
for insert,update
as
if exists(select * from inserted i where isnull(i.入库数量,0)> =isnull(i.订货数量,0))
begin
update A表
set 完成= 'True '
from A表,inserted i
where A表.规格单号=i.规格单号
and A表.小号=i.小号
and A表.节目名称=i.节目名称
and isnull(i.入库数量,0)> =isnull(i.订货数量,0)
end
------解决方案--------------------你的意思是,你可以插入新的记录来修改征服1的数量,也可以直接在老的记录上增加?
------解决方案--------------------规格单号 小号 节目名称 订货数量 入库数量
HLOT-07-0001 1 征服1 1000 1000
HLOT-07-0001 2 征服2 1000 800
HLOT-07-0001 2 征服2 1000 200
表2会不会有这样的情况?
------解决方案--------------------检查inserted临时表中入库数量> =订货数量的
向表中insert时,新插入的数量保存在inserted表中
update表时,更新后的值保存在inserted表中
------解决方案--------------------easywind8088() ( ) 信誉:100 Blog 2007-03-14 17:45:40 得分: 0
不会,
HLOT-07-0001 2 征服2 1000 800
HLOT-07-0001 2 征服2 1000 200
全合并为一条记录,如下
HLOT-07-0001 2 征服2 1000 1000
---------------------
應該會存在這種情況的,不會所有的東西一起入庫的,肯定會有今天入庫一部分,明天入庫一部分的情況。
------解决方案--------------------楼主的表2中入库数量是一直加的?
不知道我这个对不对
if object_id( 'pubs..表A ') is not null
drop table pubs..表A
GO
CREATE TABLE 表A
(
规格 nvarchar(50),
小号 int,
订货数量 int,
完成 bit
)
INSERT INTO 表A SELECT 'HLOT-07-0001 ',1,1000,0
UNION ALL SELECT 'HLOT-07-0001 ',2,1000,0
if object_id( 'pubs..表B ') is not null
drop table pubs..表B
GO
CREATE TABLE 表B
(
规格 nvarchar(50),
小号 int,
订货数量 int,
入库数量 int