Office中国论坛/Access中国论坛

标题: [求助]存储过程编写求助! [打印本页]

作者: 狼书生    时间: 2006-6-28 06:12
标题: [求助]存储过程编写求助!
[attach]18761[/attach]
要求:

表2中“标志”里的内容=0就更新表1中具有与表2有相名称的项里的“数量”使表1中的“数量”= 表2中的“收入数量”-  表2中的“发出数量”,同时使表2中的“标志”变为“1”

在存储过程里是不是只能更新一个表的内容啊,不能象MDB里的更新查询那样同时更新2个表的内容?

我要做到我说的那样的效果该怎么做啊?

有哪位大哥帮我写出来我参考下吗?

在此先谢谢了!
[em04]

[此贴子已经被作者于2006-6-29 13:26:57编辑过]


作者: tz-chf    时间: 2006-6-29 16:21
你先贴出来看看
作者: 狼书生    时间: 2006-6-29 20:03
CREATE PROCEDURE Input1

as

update 表1

SET

表1.数量=表2.收入数量-表2.发出数量

from 表1 INNER JOIN 表2 ON (表1.名称=表2.名称)

WHERE (((表2.标志)='0'))





写的这个存储过程只能更新表1啊,怎么才能够同时更新表2中的标志,使其变为“1”[em06]

[此贴子已经被作者于2006-6-29 12:03:22编辑过]


作者: tz-chf    时间: 2006-6-30 01:34
再接着写update
作者: 狼书生    时间: 2006-6-30 02:43
是接着update 表2吗?

这能实现同步更新?

我要的是表2中被用来更新了表1中的数据的项的“标志”才变为“1”啊

不是要所有的表2中的标志都变为“1”

接着写update 表2 能实现吗?[em04]
作者: tz-chf    时间: 2006-6-30 03:46
如果是实施了参照完整性的一对多关系,把表2的标志都改为1。
作者: 狼书生    时间: 2006-6-30 21:37
以下是引用tz-chf在2006-6-29 19:46:00的发言:


如果是实施了参照完整性的一对多关系,把表2的标志都改为1。



不懂,能说详细点吗?谢谢!

另外我在表2中的名称如果在表1中有的话就update,没有就在表1中insert。该怎么做?
作者: wuaza    时间: 2006-7-1 03:49
从你的条件看,难道不是所有的表2中的标志为“0”的都更新为1?还有别的条件吗?
作者: tz-chf    时间: 2006-7-1 03:54
这样的表结构不好
作者: 狼书生    时间: 2006-7-3 04:57
以下是引用wuaza在2006-6-30 19:49:00的发言:


从你的条件看,难道不是所有的表2中的标志为“0”的都更新为1?还有别的条件吗?



是的,只是我在开始为了简单没在最先说明。事实上还有另外一个条件的。表2中标志为“0”的都会更新为“1”。但不是都更新到表1中。表2中会另外有个条件的,我没列出来。

其实我是在做一个库存系统的出入库统计。但公司的零件仓分成了3类。所以,表2做为入库表时,要更新到库存时就要把表里数据分别更新到3个零件仓的表中。

我想了下,如果实在不行我就只有在做入库表时就先把入库表按3类零件仓预先分成3个表再更新了。

但我前面说的要是表1中有表2中的名称就更新表1,没有就插入到表1该如何做啊?请指点下啊,谢谢了!
作者: 狼书生    时间: 2006-7-3 06:15
以下是引用tz-chf在2006-6-30 19:54:00的发言:
这样的表结构不好

要怎样结构才合理?
作者: wuaza    时间: 2006-7-3 20:56
试试触发器。

CREATE TRIGGER tri_a ON a
FOR INSERT,UPDATE,DELETE
AS
IF EXISTS (SELECT * FROM deleted)
BEGIN
DELETE FROM b WHERE .....--(所有栏位与deleted表相等的条件)
END
IF EXISTS (SELECT * FROM inserted)
BEGIN
INSERT INTO b SELECT * FROM inserted
END

作者: 狼书生    时间: 2006-7-4 00:19
一言惊醒梦中人!真是太谢谢了!我马上去试下!

再次感谢!




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3