在SQL SERVER2000中如何实现两个表的联系?例如,当借用表的借用数量发生变化时,对应的库存信息表中的库存数量作相应的减少?当借用数量等于库存数量或大于库存数量时删除库存信息中的该条信息谢谢,急!!!
解决方案 »
- 一个名字叫做DB的数据库里面有20多张表,不知道具体那张表,但知道某张表有个字段叫'name'的存了一个叫'zhangsan'的名字,请问可以查出这张表的名字吗
- 100分请教:读取EXCEL中某列的值时,如果该列设置了自定义的格式,怎么处理?
- 大家帮我看看这个存储过程该怎么改?
- 如何将EXCEL中某列有相同的字段追加到数据加中?
- 服务器问题
- SELECT奇怪的问题
- 详细的执行,一步一步还是看不懂哦
- sql server出现未能建立与(local)的连接???为什么?
- 由于超出容量限制,不能创建新事务----我抓不到它
- 救救我啊!
- sql view和表的结合查询以及更新,急,跪求各位出手!
- 还需要看什么书
看看以下文章http://blog.csdn.net/Haiwer/archive/2008/10.aspxhttp://blog.csdn.net/Haiwer/archive/2008/10/04/3016300.aspx
这个很简单吧.写两条更新SQL放到借用表的Trigger中就可以做到了。
帖出表结构、Sample数据、及所需结果。
CREATE table #TT(name varchar(10),QTY FLOAT)
--库存
insert #T select '121', 20
insert #T select '122', 30
insert #T select '123',40
insert #T select '124',20
--借用insert #TT select '122', 20
insert #TT select '123', 50
这样的数据,使其用了触发器#T中'122'的行变成'122',10
#T中'123'的行删除并且提示库存中只有40件,您只能借用40件.#TT表中'123'行也变成 '123',40
谢谢 帮忙!
CREATE table T(name varchar(10),QTY FLOAT)
CREATE table TT(name varchar(10),QTY FLOAT)
--库存
insert T select '121', 20
insert T select '122', 30
insert T select '123',40
insert T select '124',20
gocreate trigger tri_#tt on tt instead of insert
as
insert into tt select a.name,case when a.qty>b.qty then b.qty else a.qty end from inserted a,t b
where a.name=b.name
if exists(select 1 from inserted a,t b where a.name=b.name and a.QTY>b.QTY)
raiserror('库存不够',16,1)
go--借用 insert TT select '122', 20
insert TT select '123', 50 --查看结果
select * from tt
CREATE table T(name varchar(10),QTY FLOAT)
CREATE table TT(name varchar(10),QTY FLOAT)
--库存
insert T select '121', 20
insert T select '122', 30
insert T select '123',40
insert T select '124',20
gocreate trigger tri_#tt on tt instead of insert
as
insert into tt select a.name,case when a.qty>b.qty then b.qty else a.qty end from inserted a,t b
where a.name=b.name
update t set Qty=b.QTY-case when a.qty>b.qty then b.qty else a.qty end from inserted a,t b
where a.name=b.name
if exists(select 1 from inserted a,t b where a.name=b.name and a.QTY>b.QTY)
raiserror('库存不够',16,1)
go--借用 insert TT select '122', 20
insert TT select '123', 50 select * from ttselect * from t
CREATE table T(name varchar(10),QTY FLOAT)
CREATE table TT(name varchar(10),QTY FLOAT)
--库存
insert T select '121', 20
insert T select '122', 30
insert T select '123',40
insert T select '124',20GO
CREATE TRIGGER trgIns
ON TT
FOR INSERT
AS
BEGIN
UPDATE TT
SET QTY=CASE WHEN a.Qty>b.Qty
THEN b.Qty
ELSE a.Qty
END
FROM TT a,T b,inserted c
WHERE a.name=c.name
AND a.name=b.name UPDATE T
SET QTY=CASE WHEN a.QTY>=b.Qty
THEN a.Qty-b.Qty
ELSE 0
END
FROM T a,inserted b
WHERE a.name=b.name
END
GO
--借用
insert TT select '122', 20
insert TT select '123', 50 SELECT * FROM T/*
name QTY
---------- -----------------------------------------------------
121 20.0
122 10.0
123 0.0
124 20.0
*/SELECT * FROM TT
/*
name QTY
---------- -----------------------------------------------------
122 20.0
123 40.0
*/DROP TABLE T,TT
CREATE table TT(name varchar(10),QTY FLOAT)
--库存
insert T select '121', 20
insert T select '122', 30
insert T select '123',40
insert T select '124',20
gocreate trigger tri_#tt on tt instead of insert
as
insert into tt select a.name,case when a.qty>b.qty then b.qty else a.qty end from inserted a,t b
where a.name=b.name
update t set Qty=b.QTY-case when a.qty>b.qty then b.qty else a.qty end from inserted a,t b
where a.name=b.name
delete t where qty=0
if exists(select 1 from inserted a,t b where a.name=b.name and a.QTY>b.QTY)
raiserror('库存不够',16,1)
go--借用 insert TT select '122', 20
insert TT select '123', 50 select * from ttselect * from t