VB+SQL2000
数据库内容
ID 型号ID 型号 原材料ID 原材料名称 比例 价格 金额
1 C101 MM101 Y101 RMC 0.5 10 5
1 C101 MM101 Y102 RTF 0.5 18 92 C102 MM102 C101 MM101 0.6 14 8.4
2 C102 MM102 Y102 RTF 0.4 18 7.23 C103 MM103 C101 MM101 0.4 14 5.6
3 C103 MM103 C102 MM102 0.6 15.6 9.36当我其中某种原材料的价格更新时,所关联的数据都更新。
例如:我把(原材料ID:Y102,原材料名称:RTF,价格:18改为10)时得到如下:ID 型号ID 型号 原材料ID 原材料名称 比例 价格 金额
1 C101 MM101 Y101 RMC 0.5 10 5
1 C101 MM101 Y102 RTF 0.5 10 52 C102 MM102 C101 MM101 0.6 10 6
2 C102 MM102 Y102 RTF 0.4 10 43 C103 MM103 C101 MM101 0.4 10 4
3 C103 MM103 C102 MM102 0.6 10 6
请问如何实现,可以建立临时表或其它表过渡或在表内增加标识字段。请各位大侠帮忙.
数据库内容
ID 型号ID 型号 原材料ID 原材料名称 比例 价格 金额
1 C101 MM101 Y101 RMC 0.5 10 5
1 C101 MM101 Y102 RTF 0.5 18 92 C102 MM102 C101 MM101 0.6 14 8.4
2 C102 MM102 Y102 RTF 0.4 18 7.23 C103 MM103 C101 MM101 0.4 14 5.6
3 C103 MM103 C102 MM102 0.6 15.6 9.36当我其中某种原材料的价格更新时,所关联的数据都更新。
例如:我把(原材料ID:Y102,原材料名称:RTF,价格:18改为10)时得到如下:ID 型号ID 型号 原材料ID 原材料名称 比例 价格 金额
1 C101 MM101 Y101 RMC 0.5 10 5
1 C101 MM101 Y102 RTF 0.5 10 52 C102 MM102 C101 MM101 0.6 10 6
2 C102 MM102 Y102 RTF 0.4 10 43 C103 MM103 C101 MM101 0.4 10 4
3 C103 MM103 C102 MM102 0.6 10 6
请问如何实现,可以建立临时表或其它表过渡或在表内增加标识字段。请各位大侠帮忙.
VB+SQL2000
数据库内容
ID 型号ID 型号 原材料ID 原材料名称 比例 价格 金额
1 C101 MM101 Y101 RMC 0.5 10 5
1 C101 MM101 Y102 RTF 0.5 18 9 2 C102 MM102 C101 MM101 0.6 14 8.4
2 C102 MM102 Y102 RTF 0.4 18 7.2 3 C103 MM103 C101 MM101 0.4 14 5.6
3 C103 MM103 C102 MM102 0.6 15.6 9.36
例如:我把(原材料ID:Y102,原材料名称:RTF,价格:18改为10)时得到如下: ID 型号ID 型号 原材料ID 原材料名称 比例 价格 金额
1 C101 MM101 Y101 RMC 0.5 10 5
1 C101 MM101 Y102 RTF 0.5 10 5 2 C102 MM102 C101 MM101 0.6 10 6
2 C102 MM102 Y102 RTF 0.4 10 4 3 C103 MM103 C101 MM101 0.4 10 4
3 C103 MM103 C102 MM102 0.6 10 6 使用触器它也不能从上到下更新啊(因为我只能调用已经存入数据库的型号)
它也是指定条件才能更新。。
实际上,用两个 SQL 语句就可以了:Update TableName Set 价格 = 10 Where 材料ID='Y102' And 原材料名称='RTF'
Update TableName Set 金额 = 比例 * 价格 Where 材料ID='Y102' And 原材料名称='RTF'
1 c1 MM101 Y101 RMC 0.5 10 5
1 c1 MM101 Y102 RTF 0.5 18 9 2 C2 MM102 C1 MM101 0.6 14 8.4 (MM101是由型号c1里的RMC和RTF组成)
2 c2 MM102 Y102 RTF 0.4 18 7.2 3 C3 MM103 c1 MM101 0.4 14 5.6 (MM101是由型号c1里的RMC和RTF组成)
3 C3 MM103 c2 MM102 0.6 15.6 9.36 (MM102是由型号MM101和RTF组成)4 C4 MM104 c1 MM101 0.4 14 5.6 (MM101是由型号c1里的RMC和RTF组成)
4 C4 MM104 c3 MM103 0.6 15.6 9.36 (MM103是由型号MM102和MM101组成)
------------------------------------------------------------------------------------
我存储时使用再插入数据库的方法。
ID 型号ID 型号 原材料ID 原材料名称 比例 价格 金额
1 c1 MM101 Y101 RMC 0.5 10 5
1 c1 MM101 Y102 RTF 0.5 18 9 2 c2 MM101 Y101 RMC 0.5 10 5 (使用插入数据库)
2 c2 MM101 Y102 RTF 0.5 18 9 (使用插入数据库)
2 C2 MM102 C1 MM101 0.6 14 8.4
2 c2 MM102 Y102 RTF 0.4 18 7.2 3 c3 MM101 Y101 RMC 0.5 10 5 (使用插入数据库)
3 c3 MM101 Y102 RTF 0.5 18 9 (使用插入数据库)
3 C3 MM103 c1 MM101 0.4 14 5.6
3 C3 MM103 c2 MM102 0.6 15.6 9.36
3 c3 MM101 Y101 RMC 0.5 10 5 (使用插入数据库)
3 c3 MM101 Y102 RTF 0.5 18 9 (使用插入数据库)
3 C3 MM102 C1 MM101 0.6 14 8.4 (使用插入数据库)
3 c3 MM102 Y102 RTF 0.4 18 7.2 (使用插入数据库)4 C4 MM104 c1 MM101 0.4 14 5.6
4 C4 MM104 c3 MM103 0.6 15.6 9.36
4 c4 MM101 Y101 RMC 0.5 10 5 (使用插入数据库)
4 c4 MM101 Y102 RTF 0.5 18 9 (使用插入数据库)
4 c4 MM101 Y101 RMC 0.5 10 5 (使用插入数据库)
4 c4 MM101 Y102 RTF 0.5 18 9 (使用插入数据库)
4 C4 MM103 c1 MM101 0.4 14 5.6
4 C4 MM103 c2 MM102 0.6 15.6 9.36
4 c4 MM101 Y101 RMC 0.5 10 5 (使用插入数据库)
4 c4 MM101 Y102 RTF 0.5 18 9 (使用插入数据库)
4 C4 MM102 C1 MM101 0.6 14 8.4 (使用插入数据库)
4 c4 MM102 Y102 RTF 0.4 18 7.2 (使用插入数据库)
1、产成品A:是由原材料A1和A2组成(其中A1的比例是0.5单价是10元,A2白比例0.5单价是20)那么产成品A价格就等于15元2、产成品B:是由原材料A1和(产成品A)组成(那么A1的比例是0.5单价是10,而产成品A比例是0.5[(又是由A1的比例是0.5单价是10,A2白比例0.5单价是20组成)]那么产成品B的价格是原材料A1(0.5*10=5)+ 产成品A 0.5*[(05*10)+(0.5*20)]=7.5等于12.53、产成品c:是由产成品(比例0.6) B和产成品(比例0.3) A和比例(0.1) A2组成.4、产成品D:又有可能由产成品(比例0.8) C和产成品(比例0.2) A组.我想得到的是:
当我把原材料A1的价格变更为30元时,所有调用过它的产成品都更新。
1、产成品A:A1 0.5 30 15 , A2 0.5 20 金额 25元
2、产成品B:A1 0.5 30 15 , 0.5 (产成品A等于25元) 金额 27.5 元
3、产成品C:0.6 产成品B(27.5),0.3 产成品A(25),0.1 (A2 0.5*20=10) 金额 25元
4、产成品D:0.8 产成品c(25),0.2 产成品A(25)金额 25元请各位大侠帮忙,我现在想搞个产成品生产成本计算系统。
思想路是(当我某种原材料的价格变动,我所关联的半成品和产成品的价格都变动)如果所有的半成品和产成品都只调用一资就很容易,但我现在就是想产成品调用产成品后,如果我所调用的产成品中含有需要更的原材料时,所有关联的都更新)
1、原材料价格表
ID 原材料名称 单价
Y1 A1 10
Y2 A2 20
Y3 A3 15
Y4 A4 30
Y5 A5 5
2、主表(产成品)更新价格(update 主表 set 单价=(select 单价 from 原材料价格表 where 主表.原材料ID=原材料价格表.ID))
(当标识1,标识2都等2时,
INSERT INTO 产品成分表(iD,标识1,标识2,型号ID,型号,原材料ID,原材名称,比例,单价) select '" & Trim(Label11.Caption) & "' as id,'4' as 标识1, 标识2,型号ID,型号,原材料ID,原材名称,比例,单价 From chanpinxinghao WHERE (型号ID = '" & Trim(MSFlexGrid1.TextMatrix(i, 3)) & "')"iD 标识1 标识2 型号ID 型号 原材料ID 原材名称 比例 单价C101 1 1 C1 AA-101 Y2 A2 0.6 20
C101 1 1 C1 AA-101 Y5 A5 0.4 5C102 1 1 C2 AA-102 Y3 A3 0.5 15
c102 2 2 c2 AA-102 C1(产成品) AA-101 0.5 (0.6*20)+(0.4*5)=14C103 1 1 C3 AA-103 Y1 A1 0.6 10
C103 2 2 C3 AA-103 C2(产成品) AA-102 0.3 (0.5*15)+(0.5*14)=14.5
C103 1 1 C3 AA-103 Y4 A4 0.1 30C104 1 1 C4 AA-104 Y2 A2 0.2 20
C104 2 2 C4 AA-104 C3(产成品) AA-103 0.4 13.35
C104 2 2 C4 AA-104 C2(产成品) AA-102 0.4 14.5注:标识1,标识2都等于1时,代表调用的是原材料,标识1,标识2都等于2时,代表调用产成品。
当标识1,标识2都等于2时,我就把所调用的资料插入到产品分类表中.3、产品成分表(update 产品成分表 set 单价=(select 单价 from 原材料价格表 where 产品成分表.原材料ID=原材料价格表.ID))
iD 标识1 标识2 型号ID 型号 原材料ID 原材名称 比例 单价C102 4 1 C2 AA-102 Y2 A2 0.6 20
C102 4 1 C2 AA-102 Y5 A5 0.4 5
C102 4 1 C2 AA-102 Y3 A3 0.5 15
c102 4 2 c2 AA-102 C1(产成品) AA-101 0.5 (0.6*20)+(0.4*5)=14
注:C102是由以上组成。标识1等于4代表从主表复制过来的
C103 4 1 C1 AA-101 Y2 A2 0.6 20
C103 4 1 C1 AA-101 Y5 A5 0.4 5
C103 4 1 C2 AA-102 Y3 A3 0.5 15
c103 4 2 c2 AA-102 C1(产成品) AA-101 0.5 (0.6*20)+(0.4*5)=14
C103 4 1 C3 AA-103 Y1 A1 0.6 10
C103 4 2 C3 AA-103 C2(产成品) AA-102 0.3 (0.5*15)+(0.5*14)=14.5
C103 4 1 C3 AA-103 Y4 A4 0.1 30
注:C103是由以上组成。标识1等于4代表从主表复制过来的
.....................................................
我现在这样也不能更新啊。。我想了很多办法还是不能解决.(最简单的办法就是我把所有标识1,2等于2的存入临时表,然后把它们更新,
问题就是我这样更新只能更新调用一层的,不能更新调用二次以上的。(如:AA-104是由AA-103,(AA-103又由AA-102和Y3组成)和AA-102就不能更新啦)
(如果能从上到下来更新就能解决这个问题,如:AA-102 是第一个,先更新AA-101再把调它的AA-102再相加,再会更新AA-102......)
也就是说,先更新再相加得到下一个,再更新相加......
c102 2 2 c2 AA-102 C1(产成品) AA-101 0.5 (0.6*20)+(0.4*5)=14
C103 2 2 C3 AA-103 C2(产成品) AA-102 0.3 (0.5*15)+(0.5*14)=14.5
C104 2 2 C4 AA-104 C3(产成品) AA-103 0.4 13.35
C104 2 2 C4 AA-104 C2(产成品) AA-102 0.4 14.5
产成品成分表怎么存?大侠。
每条记录是一种产品的一种原材料。所以一个由 n 种原材料组成的产品就有 n 条记录。
但是问题就是每种产成品调用产成品后所使用的比例不一样。
例如:
iD 标识1 标识2 型号ID 型号 原材料ID 原材名称 比例 单价
C101 1 1 C1 AA-101 Y2 A2 0.6 20
C101 1 1 C1 AA-101 Y5 A5 0.4 5 C102 1 1 C2 AA-102 Y3 A3 0.5 15
c102 2 2 c2 AA-102 C1(产成品) AA-101 0.5 (0.6*20)+(0.4*5)=14
我在C102里调用C101。但是我在C102里的比例0.5。
您的意思应该是这样
C102 1 1 C2 AA-102 Y3 A3 0.5 15
c102 2 2 c2 AA-102 C1(产成品) AA-101 0.5 (0.6*20)+(0.4*5)=14 等于14分解成以下存。
C102 1 1 C2 AA-102 Y3 A3 0.5 15
C102 1 1 C2 AA-102 Y2 A2 0.6 20
C102 1 1 C2 AA-102 Y5 A5 0.4 5 等于21.5我原先也是这样想,但是我在C102里的比例0.5。
---------------------------
列名 数据类型
SID decimal
fenlei decimal
leibieid nvarchar
xinghaoid nvarchar
xinghao varchar
yuancailiaoid nvarchar
yuancailiao varchar
bili decimal
danjia decimal
huang decimal
paixu decimal
shibiehao decimal
beizhu varchar
----------------------------
触发器:
CREATE TRIGGER [TRIGGER NAME] ON [dbo].[chanpinxinghao]
FOR INSERT, UPDATE, DELETE
AS
----------------------------
表名:yuancailiao(原材料价格表)
-----------------------------
yuancailiaoid nvarchar
leibie varchar
yuancailiao varchar
danjia decimal
-----------------------------
触发器:
CREATE TRIGGER [TRIGGER NAME] ON [dbo].[yuancailiao]
FOR INSERT, UPDATE, DELETE
AS
-----------------------
谢谢大侠
1 C101 MM101 Y101 RMC 0.5 10 5
1 C101 MM101 Y102 RTF 0.5 18 9 2 C102 MM102 C101 MM101 0.6 14 8.4
2 C102 MM102 Y102 RTF 0.4 18 7.2 3 C103 MM103 C101 MM101 0.4 14 5.6
3 C103 MM103 C102 MM102 0.6 15.6 9.36
把你上面这个表的Create语句贴出来。
选中你的这个表,右键编写表脚本为-->create到-->新查询编辑器窗口,然后把查询分析器里的语句贴出来。
drop table [dbo].[chanpinxinghao]
GOCREATE TABLE [dbo].[chanpinxinghao] (
[SID] [decimal](18, 0) NULL ,
[fenlei] [decimal](18, 0) NULL ,
[leibieid] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[xinghaoid] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[xinghao] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[yuancailiaoid] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[yuancailiao] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[bili] [decimal](18, 3) NULL ,
[danjia] [decimal](18, 3) NULL ,
[huang] [decimal](18, 0) NULL ,
[paixu] [decimal](18, 0) NULL ,
[shibiehao] [decimal](18, 3) NULL ,
[beizhu] [varchar] (200) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO
[SID] [decimal](18, 0) NULL ,
[fenlei] [decimal](18, 0) NULL ,
[leibieid] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[xinghaoid] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[xinghao] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[yuancailiaoid] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[yuancailiao] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[bili] [decimal](18, 3) NULL ,
[danjia] [decimal](18, 3) NULL ,
[huang] [decimal](18, 0) NULL ,
[paixu] [decimal](18, 0) NULL ,
[shibiehao] [decimal](18, 3) NULL ,
[beizhu] [varchar] (200) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO
我没测试过,如果还有问题再告诉我。
Create trigger [Updanjia] on [dbo].[chanpinxinghao]
for update
as
begin
set nocount on
declare @bdanjiaOld decimal(18,0)
,@bdanjiaNew decimal(18,0)
,@bjineOld decimal(18,0)
,@bjineNew decimal(18,0)
if exists(select * from inserted) and exists(select * from deleted)
begin
select @bdanjiaOld=danjia from deleted
select @bdanjiaNew=danjia from inserted
if @bdanjiaOld<>@bdanjiaNew
Begin
update chanpinxinghao set jine=bili*danjia where SID=(select SID from inserted)
End
select @bjineOld=jine from deleted
select @bjineNew=jine from inserted
if @bjineOld<>@bjineNew
Begin
update chanpinxinghao set danjia=(select sum(jine) from chanpinxinghao group by xinghaoid)
where yuancailiaoid=(select xinghaoid from inserted)
End
End
End
sid fenlei xinghaoid xinghao yuancailiaoid yuancailiao bili danjia jine huang paixu
001 1 C1000 AA-102 Y10001 R-MA-T-01 0.6 10 6 1 1
001 1 C1000 AA-102 Y10003 R-MA-X-09 0.4 180 72 1 2002 1 C1004 AA-102白 Y10000 R-MA-X-02 0.6 90 54 1 1
002 1 C1004 AA-102白 Y10002 R-MC-Z-09 0.4 60 24 1 2003 3 C1001 AA-103 C1000 AA-102 0.6 84 50.4 1 1
003 3 C1001 AA-103 C1004 AA-102白 0.4 78 31.2 1 2 1、fenlei为1时代表调用原材料,为3时,代表调用产成品.
2、huang代表循环次数,因为我保存时是使用MSFLEXGRID控件作为表单录入,所有要有一个作为我保存时循环存入表。
3、PAIXU代表,我调用它显示时的排序标识。
大侠,我用您的触发器时还是不能更新数据。(我在SQL里测试,不能更新)Update chanpinxinghao set danjia=20 where yuancailiaoid='Y1000001',我使用UPDATE时,触发器没有反映。
CREATE TABLE [chanpinxinghao] (
[SID] [decimal](18, 0) NULL ,
[fenlei] [decimal](18, 0) NULL ,
[leibieid] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[xinghaoid] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[xinghao] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[yuancailiaoid] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[yuancailiao] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[bili] [decimal](18, 3) NULL ,
[danjia] [decimal](18, 3) NULL ,
[jine] [decimal](18, 3) NULL ,
[huang] [decimal](18, 0) NULL ,
[paixu] [decimal](18, 0) NULL ,
[shibiehao] [decimal](18, 3) NULL ,
[beizhu] [varchar] (200) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO
CREATE TABLE [chanpinxinghao] (
[SID] [decimal](18, 0) NULL ,
[fenlei] [decimal](18, 0) NULL ,
[leibieid] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[xinghaoid] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[xinghao] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[yuancailiaoid] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[yuancailiao] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[bili] [decimal](18, 3) NULL ,
[danjia] [decimal](18, 3) NULL ,
[jine] [decimal](18, 3) NULL ,
[huang] [decimal](18, 0) NULL ,
[paixu] [decimal](18, 0) NULL ,
[shibiehao] [decimal](18, 3) NULL ,
[beizhu] [varchar] (200) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO
CREATE TABLE [chanpinxinghao] (
[SID] [decimal](18, 0) NULL ,
[fenlei] [decimal](18, 0) NULL ,
[leibieid] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[xinghaoid] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[xinghao] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[yuancailiaoid] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[yuancailiao] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[bili] [decimal](18, 3) NULL ,
[danjia] [decimal](18, 3) NULL ,
[jine] [decimal](18, 3) NULL ,
[huang] [decimal](18, 0) NULL ,
[paixu] [decimal](18, 0) NULL ,
[shibiehao] [decimal](18, 3) NULL ,
[beizhu] [varchar] (200) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO
--测试数据
insert into [chanpinxinghao](sid,xinghaoid,yuancailiaoid,bili,danjia,jine)
values(1,'C1000','Y10001',0.6,10,6)
insert into [chanpinxinghao](sid,xinghaoid,yuancailiaoid,bili,danjia,jine)
values(1,'C1000','Y10003',0.4,180,72)
insert into [chanpinxinghao](sid,xinghaoid,yuancailiaoid,bili,danjia,jine)
values(2,'C1004','Y10000',0.6,90,54)
insert into [chanpinxinghao](sid,xinghaoid,yuancailiaoid,bili,danjia,jine)
values(2,'C1004','Y10002',0.4,60,24)
insert into [chanpinxinghao](sid,xinghaoid,yuancailiaoid,bili,danjia,jine)
values(3,'C1001','C1000',0.6,78,50.4)
insert into [chanpinxinghao](sid,xinghaoid,yuancailiaoid,bili,danjia,jine)
values(3,'C1001','C1004',0.4,78,31.2)
--触发器更新单价
create trigger [Updanjia] on [dbo].[chanpinxinghao]
for update
as
begin
set nocount on
declare @bdanjiaOld decimal(18,0)
,@bdanjiaNew decimal(18,0)
if exists(select * from inserted) and exists(select * from deleted)
begin
select @bdanjiaOld=danjia from deleted
select @bdanjiaNew=danjia from inserted
if @bdanjiaOld<>@bdanjiaNew
Begin
update chanpinxinghao set jine=bili*danjia where SID=(select SID from inserted)
End
End
End
--触发器更新金额
create trigger [Upjine] on [dbo].[chanpinxinghao]
for update
as
begin
set nocount on
declare @bjineOld decimal(18,0)
,@bjineNew decimal(18,0)
if exists(select * from inserted) and exists(select * from deleted)
begin
select @bjineOld=jine from deleted
select @bjineNew=jine from inserted
if @bjineOld<>@bjineNew
Begin
update chanpinxinghao set danjia=(
select sum(jine) from chanpinxinghao where SID in (select SID from inserted) group by xinghaoid
)
where yuancailiaoid in (select xinghaoid from inserted)
End
End
End
--测试更新
select * from [chanpinxinghao]
update [chanpinxinghao] set danjia=100 where sid=1 and yuancailiaoid='Y10003'
select * from [chanpinxinghao]
这次可以了,测试过了,不过我不知道你的SID和yuancailiaoid的区别,可能需要稍微改下
(子查询返回的值多于一个,当子查询跟随在=,!=,<,<=,>,>=之后,或子查询用作表达式时,这种情况是不允许的)
SET danjia = 10
WHERE (yuancailiaoid = 'Y10001') OR
(yuancailiaoid = 'Y10003')
for update
as
begin
set nocount on
declare @bdanjiaOld decimal(18,0)
,@bdanjiaNew decimal(18,0)
if exists(select * from inserted) and exists(select * from deleted)
begin
select @bdanjiaOld=danjia from deleted
select @bdanjiaNew=danjia from inserted
if @bdanjiaOld<>@bdanjiaNew
Begin
update chanpinxinghao set jine=bili*danjia where SID in (select SID from inserted)
End
End
End
000001 C100002 Y1000000 0.6 30 18
000001 C100002 Y1000002 0.3 30 9
000001 C100002 Y1000005 0.1 90 9000002 C100003 C100002 0.8 [81] 64.8
000002 C100003 Y1000001 0.1 10 1
000002 C100003 Y1000003 0.1 180 18000003 C100000 C100002 0.6 [81] 48.6
000003 C100000 C100003 0.4 [84.8] 33.92
update chanpinxinghao set jine=bili*danjia where SID = (select SID from inserted)
修改为
update chanpinxinghao set jine=bili*danjia where SID in (select SID from inserted)了金额应该会更新啊,上面这个就是更新金额的,我确实测试过才给你发的。
000001 C100000 AA-102 Y1000001 R-MA-T-01 0.6 30 18
000001 C100000 AA-102 Y1000003 R-MA-X-09 0.4 30 12
000002 C100004 AA-102白 Y1000000 R-MA-X-02 0.6 65 39
000002 C100004 AA-102白 Y1000002 R-MC-Z-09 0.4 20 8
000003 C100001 AA-103 C100000 AA-102 0.6 30 18
000003 C100001 AA-103 C100004 AA-102白 0.4 47 18.8
000004 C100002 1223 [Y1000002] [R-MC-Z-09] 0.6 20 36
000004 C100002 1223 [Y1000002] [R-MC-Z-09] 0.4 20 24UPDATE chanpinxinghao set danjia=30 where yuancailiaoid='Y1000002'
(子查询返回的值多于一个,当子查询跟随在=,!=, <, <=,>,>=之后,或子查询用作表达式时,这种情况是不允许的)
--触发器更新单价
alter trigger [Updanjia] on [dbo].[chanpinxinghao]
for update
as
begin
set nocount on
declare @bdanjiaOld decimal(18,0)
,@bdanjiaNew decimal(18,0)
,@bSID decimal(18,0)
if exists(select * from inserted) and exists(select * from deleted)
begin
select * into #tmpin from inserted
select * into #tmpde from deleted
while exists(select top 1 * from #tmpde)
Begin
--此处不知道主键是哪些,需要修改成相应主键
select @bSID=SID,@bdanjiaOld=danjia from #tmpde
select @bdanjiaNew=danjia from #tmpin where SID=@bSID
if @bdanjiaOld<>@bdanjiaNew
Begin
update chanpinxinghao set jine=bili*danjia where SID =@bSID
End
delete from #tmpde where SID=@bSID
delete from #tmpin where SID=@bSID
select @bSID=null
End
drop table #tmpin
drop table #tmpde
End
End