Group_List List
序號 編號 部件號 人工金額 耗材金額 序號 產品編號 人工金額 耗材金額
1 998 001 1000 1000 1 001 950 750
2 998 002 1000 1000 2 001 50 250
其中序號是關鍵字且為自增型,Group_List.部件號=List.產品編號
現將List中"序號"為1的"人工金額"950改為800"耗材金額"由750改為550
Group中的"部件號"為001的"人工金額"由1000要變為850"耗材金額"由1000改為800
若將List中"產品編號"為001的全部刪除則Group_List中"部件號"為001的"人工金額""耗材金額"都為0
我用以下語句卻不能達到我想要的效果,請高手指點,謝謝!
CREATE TRIGGER List_Total
ON List
FOR UPDATE, DELETE
AS
if update(人工金額)
begin
declare @ManPric as float
declare @Old_ManPric as float
select @ManPric=人工金額 from inserted
select @Old_ManPric=人工金額 from deleted
update Group_List
set Group_List.人工金額=Group_List.人工金額+@ManPric-@Old_ManPric
where Group_List.部件號 in (select 人工金額 from deleted )
end
21 个解决方案
#1
if update(人工金額) ?????????
你更新时候,难道也没有变化吗?
#2
第一个修改的使用instead of 触发器
create trigger T1 on list --修改触发器
instead of update
as
if update(人工金额) or update(耗材金额)
begin
update group_list
set 人工金额=(人工金额-b.人工金额+c.人工金额),耗材金额=(耗材金额-b.耗材金额+c.产品编号)
from group_list a
inner join list b
on a.部件号=b.产品编号
inner join inserted c
on a.部件号=c.产品编号
end
create trigger T1 on list --修改触发器
instead of update
as
if update(人工金额) or update(耗材金额)
begin
update group_list
set 人工金额=(人工金额-b.人工金额+c.人工金额),耗材金额=(耗材金额-b.耗材金额+c.产品编号)
from group_list a
inner join list b
on a.部件号=b.产品编号
inner join inserted c
on a.部件号=c.产品编号
end
#3
第二个使用for触发器:
create trigger T2 on list --删除触发器
for delete
as
update group_list
set 人工金额=0,耗材金额=0
where 部件号=(select 产品编号 from deleted)
create trigger T2 on list --删除触发器
for delete
as
update group_list
set 人工金额=0,耗材金额=0
where 部件号=(select 产品编号 from deleted)
#4
create trigger T1 on list --修改触发器
instead of update
as
if update(人工金额) or update(耗材金额)
begin
update group_list
set 人工金额=(人工金额-b.人工金额+c.人工金额),耗材金额=(耗材金额-b.耗材金额+c.产品编号)
from group_list a
inner join list b
on a.部件号=b.产品编号
inner join inserted c
on a.部件号=c.产品编号
update list
set 人工金额=b.人工金额,耗材金额=b.耗材金额
from list a
inner join inserted b
on a.产品编号=b.产品编号
end
instead of update
as
if update(人工金额) or update(耗材金额)
begin
update group_list
set 人工金额=(人工金额-b.人工金额+c.人工金额),耗材金额=(耗材金额-b.耗材金额+c.产品编号)
from group_list a
inner join list b
on a.部件号=b.产品编号
inner join inserted c
on a.部件号=c.产品编号
update list
set 人工金额=b.人工金额,耗材金额=b.耗材金额
from list a
inner join inserted b
on a.产品编号=b.产品编号
end
#5
frankwong(黄梓钿--快乐ing新爸爸^_^),謝謝你,但我在運行Check Syntax時提示為Error 207:invalill column name'人工金額'
invalill column name'耗材金額'
下面還有若干行這樣的提示
這是為什麼,你這裡不要declare語句嗎?請指教
invalill column name'耗材金額'
下面還有若干行這樣的提示
這是為什麼,你這裡不要declare語句嗎?請指教
#6
create trigger TR_List on List
for delete,update
as
if not exists (select * from inserted)
update a set a.人工金額=0,a.耗材金額=0 from Group_List as a,deleted as d where a.部件號=d.產品編號
else if update (人工金額) or update(耗材金額)
update a set a.人工金額=a.人工金額-(d.人工金額-i.人工金額),a.耗材金額=a.耗材金額-(d.耗材金額-i.耗材金額) from Group_List as a,inserted as i,deleted as d where a.部件號=i.產品編號 and a.部件號=d.產品編號 and i.產品編號=d.產品編號
for delete,update
as
if not exists (select * from inserted)
update a set a.人工金額=0,a.耗材金額=0 from Group_List as a,deleted as d where a.部件號=d.產品編號
else if update (人工金額) or update(耗材金額)
update a set a.人工金額=a.人工金額-(d.人工金額-i.人工金額),a.耗材金額=a.耗材金額-(d.耗材金額-i.耗材金額) from Group_List as a,inserted as i,deleted as d where a.部件號=i.產品編號 and a.部件號=d.產品編號 and i.產品編號=d.產品編號
#7
你用declare語句 把inserted 及deleted 中的相应字段的值取出来再进行去处理也可以;也可以不用declare語句 而直接用表之间的关联直接进行
#8
vinsonshen(猪骨褒咸鱼->味道没得顶):謝謝你的指點,我用你的方法雖然解決了修改問題,但我想List新增一筆同一產蛙鳴蟬噪品編號的"人工金額"或"耗材金額"時,在 Group_List中卻沒有反應,在觸發器中我作了相應的修改
for insert,delete,update
as
if not exists (select * from inserted)
update a set a.人工金額=0,a.耗材金額=0 from Group_List as a,deleted as d where a.部件號=d.產品編號
else if update (人工金額) or update(耗材金額)
update a set a.人工金額=a.人工金額-(d.人工金額-i.人工金額),a.耗材金額=a.耗材金額-(d.耗材金額-i.耗材金額) from Group_List as a,inserted as i,deleted as d where a.部件號=i.產品編號 and a.部件號=d.產品編號 and i.產品編號=d.產品編號
else if insert (人工金額) or insert(耗材金額)
update a set a.人工金額=a.人工金額+(d.人工金額+i.人工金額),a.耗材金額=a.耗材金額+(d.耗材金額+i.耗材金額) from Group_List as a,inserted as i,deleted as d where a.部件號=i.產品編號 and a.部件號=d.產品編號 and i.產品編號=d.產品編號
這裡要怎樣修改才使它有效,謝謝!
for insert,delete,update
as
if not exists (select * from inserted)
update a set a.人工金額=0,a.耗材金額=0 from Group_List as a,deleted as d where a.部件號=d.產品編號
else if update (人工金額) or update(耗材金額)
update a set a.人工金額=a.人工金額-(d.人工金額-i.人工金額),a.耗材金額=a.耗材金額-(d.耗材金額-i.耗材金額) from Group_List as a,inserted as i,deleted as d where a.部件號=i.產品編號 and a.部件號=d.產品編號 and i.產品編號=d.產品編號
else if insert (人工金額) or insert(耗材金額)
update a set a.人工金額=a.人工金額+(d.人工金額+i.人工金額),a.耗材金額=a.耗材金額+(d.耗材金額+i.耗材金額) from Group_List as a,inserted as i,deleted as d where a.部件號=i.產品編號 and a.部件號=d.產品編號 and i.產品編號=d.產品編號
這裡要怎樣修改才使它有效,謝謝!
#9
為什麼用以上方法,刪除與新增都不行,這是為什麼?
#10
create trigger TR_List on List
for delete,update,insert
as
if not exists (select * from inserted)--删除
update a set a.人工金額=0,a.耗材金額=0 from Group_List as a,deleted as d where a.部件號=d.產品編號
else if not exists (select * from deleted)--插入
update a set a.人工金額=a.人工金額+i.人工金額,a.耗材金額=a.耗材金額+i.耗材金額 from Group_List as a,inserted as i where a.部件號=i.產品編號
else if update (人工金額) or update(耗材金額)--更新
update a set a.人工金額=a.人工金額-(d.人工金額-i.人工金額),a.耗材金額=a.耗材金額-(d.耗材金額-i.耗材金額) from Group_List as a,inserted as i,deleted as d where a.部件號=i.產品編號 and a.部件號=d.產品編號 and i.產品編號=d.產品編號
for delete,update,insert
as
if not exists (select * from inserted)--删除
update a set a.人工金額=0,a.耗材金額=0 from Group_List as a,deleted as d where a.部件號=d.產品編號
else if not exists (select * from deleted)--插入
update a set a.人工金額=a.人工金額+i.人工金額,a.耗材金額=a.耗材金額+i.耗材金額 from Group_List as a,inserted as i where a.部件號=i.產品編號
else if update (人工金額) or update(耗材金額)--更新
update a set a.人工金額=a.人工金額-(d.人工金額-i.人工金額),a.耗材金額=a.耗材金額-(d.耗材金額-i.耗材金額) from Group_List as a,inserted as i,deleted as d where a.部件號=i.產品編號 and a.部件號=d.產品編號 and i.產品編號=d.產品編號
#11
楼主请注意:对于插入新数据那部分,我只是根据你大概意思写的(不知道是否符合你实际需求),你要根据你实际情况在“插入”那部分做适当修改吧
#12
frankwong(黄梓钿--快乐ing新爸爸^_^),謝謝你,但我在運行Check Syntax時提示為Error 207:invalill column name'人工金額'
invalill column name'耗材金額'
下面還有若干行這樣的提示
這是為什麼,你這裡不要declare語句嗎?請指教
//回楼主,错误提示是"人工金额"和"耗材金额"无效,你检查你的表是否有拼写错误.
无效用变量就可以不用呀
invalill column name'耗材金額'
下面還有若干行這樣的提示
這是為什麼,你這裡不要declare語句嗎?請指教
//回楼主,错误提示是"人工金额"和"耗材金额"无效,你检查你的表是否有拼写错误.
无效用变量就可以不用呀
#13
学习! 没有使用就可能会报错
#14
為什麼用這樣的語句同時刪除或更新兩個表中相同的Item號時,總是提示為表中Item號太多:詳細錯誤信息是:Column name 'Item號' appears more than once in the result Column list,語法如下:
CREATE trigger ItemName
on MainItem_List
for delete,update
as
if not exists (select * from inserted)--删除
delete a.Item號 from Zz_List_hp as a,inserted as i where a.Item號=i.產品編號
else if update (產品編號)
update a set a.Item號=d.產品編號,a.Item號=i.產品編號 from Zz_list_hp as a,inserted as i,deleted as d where a.Item號=i.產品編號 and a.Item號=d.產品編號 and i.產品編號=d.產品編號,
這個問題要怎樣解決,謝謝
CREATE trigger ItemName
on MainItem_List
for delete,update
as
if not exists (select * from inserted)--删除
delete a.Item號 from Zz_List_hp as a,inserted as i where a.Item號=i.產品編號
else if update (產品編號)
update a set a.Item號=d.產品編號,a.Item號=i.產品編號 from Zz_list_hp as a,inserted as i,deleted as d where a.Item號=i.產品編號 and a.Item號=d.產品編號 and i.產品編號=d.產品編號,
這個問題要怎樣解決,謝謝
#15
by i.產品編號
) s
where Group_List.產品編號 = s.產品編號
end
go
CREATE TRIGGER List_Total_d
ON List
FOR DELETE
AS
begin
update Group_List
set 人工金額 =isnull(人工金額,0) - isnull(s.人工金額,0)
,耗材金額 =isnull(耗材金額,0)- isnull(s.耗材金額,0)
from (
select 產品編號 ,sum(人工金額) 人工金額
,sum(耗材金額) 耗材金額
from delete
group by 產品編號
) s
where Group_List.產品編號 = s.產品編號
end
) s
where Group_List.產品編號 = s.產品編號
end
go
CREATE TRIGGER List_Total_d
ON List
FOR DELETE
AS
begin
update Group_List
set 人工金額 =isnull(人工金額,0) - isnull(s.人工金額,0)
,耗材金額 =isnull(耗材金額,0)- isnull(s.耗材金額,0)
from (
select 產品編號 ,sum(人工金額) 人工金額
,sum(耗材金額) 耗材金額
from delete
group by 產品編號
) s
where Group_List.產品編號 = s.產品編號
end
#16
--你试试
CREATE TRIGGER List_Total_u
ON List
FOR UPDATE
AS
if update(人工金額) or update(產品編號) or update(耗材金額 )
begin
update Group_List
set 人工金額 =isnull(人工金額,0) + isnull(s.人工金額,0)
,耗材金額 =isnull(耗材金額,0)+ isnull(s.耗材金額,0)
from (
select i.產品編號 ,sum(i.人工金額-d.人工金額) 人工金額
,sum(i.耗材金額 - d.耗材金額) 耗材金額
from delete d,insert i
where d.id=i.id
group by i.產品編號
) s
where Group_List.產品編號 = s.產品編號
end
go
CREATE TRIGGER List_Total_d
ON List
FOR DELETE
AS
begin
update Group_List
set 人工金額 =isnull(人工金額,0) - isnull(s.人工金額,0)
,耗材金額 =isnull(耗材金額,0)- isnull(s.耗材金額,0)
from (
select 產品編號 ,sum(人工金額) 人工金額
,sum(耗材金額) 耗材金額
from delete
group by 產品編號
) s
where Group_List.產品編號 = s.產品編號
end
CREATE TRIGGER List_Total_u
ON List
FOR UPDATE
AS
if update(人工金額) or update(產品編號) or update(耗材金額 )
begin
update Group_List
set 人工金額 =isnull(人工金額,0) + isnull(s.人工金額,0)
,耗材金額 =isnull(耗材金額,0)+ isnull(s.耗材金額,0)
from (
select i.產品編號 ,sum(i.人工金額-d.人工金額) 人工金額
,sum(i.耗材金額 - d.耗材金額) 耗材金額
from delete d,insert i
where d.id=i.id
group by i.產品編號
) s
where Group_List.產品編號 = s.產品編號
end
go
CREATE TRIGGER List_Total_d
ON List
FOR DELETE
AS
begin
update Group_List
set 人工金額 =isnull(人工金額,0) - isnull(s.人工金額,0)
,耗材金額 =isnull(耗材金額,0)- isnull(s.耗材金額,0)
from (
select 產品編號 ,sum(人工金額) 人工金額
,sum(耗材金額) 耗材金額
from delete
group by 產品編號
) s
where Group_List.產品編號 = s.產品編號
end
#17
"為什麼用這樣的語句同時刪除或更新兩個表中相同的Item號時,總是提示為表中Item號太多:詳細錯誤信息是:
Column name 'Item號' appears more than once in the result Column list"
-------------------------------------------------------------------
改成这样试试:
CREATE trigger ItemName
on MainItem_List
for delete,update
as
if not exists (select * from inserted)--删除
-- delete a.Item號 from Zz_List_hp as a,inserted as i where a.Item號=i.產品編號 (语法有误:delete 表 where 条件)改成下面的:
delete a from Zz_List_hp as a,deleted as d where a.Item號=d.產品編號
else if update (產品編號)
/*
update a set a.Item號=d.產品編號,a.Item號=i.產品編號 from Zz_list_hp as a,inserted as i,deleted as d
where a.Item號=i.產品編號 and a.Item號=d.產品編號 and i.產品編號=d.產品編號
*/--这句应该改成这样:
update a set a.Item號=i.產品編號 from Zz_list_hp as a,inserted as i,deleted as d
where a.Item號=i.產品編號 and a.Item號=d.產品編號 and i.產品編號=d.產品編號
--上面的我不知道你具体的需求,可以只大概改了成可以正确运行的SQL,操作结果是否满足你需求,楼主你自己适当改改吧。楼主,你SQL基本语法得再多多看看
Column name 'Item號' appears more than once in the result Column list"
-------------------------------------------------------------------
改成这样试试:
CREATE trigger ItemName
on MainItem_List
for delete,update
as
if not exists (select * from inserted)--删除
-- delete a.Item號 from Zz_List_hp as a,inserted as i where a.Item號=i.產品編號 (语法有误:delete 表 where 条件)改成下面的:
delete a from Zz_List_hp as a,deleted as d where a.Item號=d.產品編號
else if update (產品編號)
/*
update a set a.Item號=d.產品編號,a.Item號=i.產品編號 from Zz_list_hp as a,inserted as i,deleted as d
where a.Item號=i.產品編號 and a.Item號=d.產品編號 and i.產品編號=d.產品編號
*/--这句应该改成这样:
update a set a.Item號=i.產品編號 from Zz_list_hp as a,inserted as i,deleted as d
where a.Item號=i.產品編號 and a.Item號=d.產品編號 and i.產品編號=d.產品編號
--上面的我不知道你具体的需求,可以只大概改了成可以正确运行的SQL,操作结果是否满足你需求,楼主你自己适当改改吧。楼主,你SQL基本语法得再多多看看
#18
deodarsydn(deodar):謝謝你的指點,我的意思是刪除Group_Listk中部件號001時同時刪除List中兩個產品編號001,而不是你所說的數減少,是徹底刪除,
#19
frankwong(黄梓钿--快乐ing新爸爸^_^),謝謝你,但我在運行Check Syntax時提示為Error 207:invalill column name'人工金額'
invalill column name'耗材金額'
下面還有若干行這樣的提示
這是為什麼,你這裡不要declare語句嗎?請指教
//回楼主,错误提示是"人工金额"和"耗材金额"无效,你检查你的表是否有拼写错误.
无效用变量就可以不用呀
===================================
据我发现:“set 人工金额=(人工金额-b.人工金额+c.人工金额),耗材金额=(耗材金额-b.耗材金额+c.产品编号) ”
这句后面的算“耗材金额”是否错了,后面加的那个不是“c.产品编号” 而应该是“c.耗材金额”
invalill column name'耗材金額'
下面還有若干行這樣的提示
這是為什麼,你這裡不要declare語句嗎?請指教
//回楼主,错误提示是"人工金额"和"耗材金额"无效,你检查你的表是否有拼写错误.
无效用变量就可以不用呀
===================================
据我发现:“set 人工金额=(人工金额-b.人工金额+c.人工金额),耗材金额=(耗材金额-b.耗材金额+c.产品编号) ”
这句后面的算“耗材金额”是否错了,后面加的那个不是“c.产品编号” 而应该是“c.耗材金额”
#20
vinsonshen(猪骨褒咸鱼->味道没得顶):謝謝你的指點和建義,刪除我用if not exists (select * from inserted)--删除
delete a from Zz_List_hp as a,deleted as i where a.Item號=i.產品編號
已解決了但修改時用你的
else if update (產品編號)
update a set a.Item號=i.產品編號 from Zz_list_hp as a,inserted as i,deleted as d
where a.Item號=i.產品編號 and a.Item號=d.產品編號 and i.產品編號=d.產品編號還是不行,再有就是在List沒有與Group_List中相同的產品編號時刪除,插入,修改都會報錯,這要在前面加一條什麼樣的判斷語句,謝謝!如果分不夠我再一個帖。
delete a from Zz_List_hp as a,deleted as i where a.Item號=i.產品編號
已解決了但修改時用你的
else if update (產品編號)
update a set a.Item號=i.產品編號 from Zz_list_hp as a,inserted as i,deleted as d
where a.Item號=i.產品編號 and a.Item號=d.產品編號 and i.產品編號=d.產品編號還是不行,再有就是在List沒有與Group_List中相同的產品編號時刪除,插入,修改都會報錯,這要在前面加一條什麼樣的判斷語句,謝謝!如果分不夠我再一個帖。
#21
up
#1
if update(人工金額) ?????????
你更新时候,难道也没有变化吗?
#2
第一个修改的使用instead of 触发器
create trigger T1 on list --修改触发器
instead of update
as
if update(人工金额) or update(耗材金额)
begin
update group_list
set 人工金额=(人工金额-b.人工金额+c.人工金额),耗材金额=(耗材金额-b.耗材金额+c.产品编号)
from group_list a
inner join list b
on a.部件号=b.产品编号
inner join inserted c
on a.部件号=c.产品编号
end
create trigger T1 on list --修改触发器
instead of update
as
if update(人工金额) or update(耗材金额)
begin
update group_list
set 人工金额=(人工金额-b.人工金额+c.人工金额),耗材金额=(耗材金额-b.耗材金额+c.产品编号)
from group_list a
inner join list b
on a.部件号=b.产品编号
inner join inserted c
on a.部件号=c.产品编号
end
#3
第二个使用for触发器:
create trigger T2 on list --删除触发器
for delete
as
update group_list
set 人工金额=0,耗材金额=0
where 部件号=(select 产品编号 from deleted)
create trigger T2 on list --删除触发器
for delete
as
update group_list
set 人工金额=0,耗材金额=0
where 部件号=(select 产品编号 from deleted)
#4
create trigger T1 on list --修改触发器
instead of update
as
if update(人工金额) or update(耗材金额)
begin
update group_list
set 人工金额=(人工金额-b.人工金额+c.人工金额),耗材金额=(耗材金额-b.耗材金额+c.产品编号)
from group_list a
inner join list b
on a.部件号=b.产品编号
inner join inserted c
on a.部件号=c.产品编号
update list
set 人工金额=b.人工金额,耗材金额=b.耗材金额
from list a
inner join inserted b
on a.产品编号=b.产品编号
end
instead of update
as
if update(人工金额) or update(耗材金额)
begin
update group_list
set 人工金额=(人工金额-b.人工金额+c.人工金额),耗材金额=(耗材金额-b.耗材金额+c.产品编号)
from group_list a
inner join list b
on a.部件号=b.产品编号
inner join inserted c
on a.部件号=c.产品编号
update list
set 人工金额=b.人工金额,耗材金额=b.耗材金额
from list a
inner join inserted b
on a.产品编号=b.产品编号
end
#5
frankwong(黄梓钿--快乐ing新爸爸^_^),謝謝你,但我在運行Check Syntax時提示為Error 207:invalill column name'人工金額'
invalill column name'耗材金額'
下面還有若干行這樣的提示
這是為什麼,你這裡不要declare語句嗎?請指教
invalill column name'耗材金額'
下面還有若干行這樣的提示
這是為什麼,你這裡不要declare語句嗎?請指教
#6
create trigger TR_List on List
for delete,update
as
if not exists (select * from inserted)
update a set a.人工金額=0,a.耗材金額=0 from Group_List as a,deleted as d where a.部件號=d.產品編號
else if update (人工金額) or update(耗材金額)
update a set a.人工金額=a.人工金額-(d.人工金額-i.人工金額),a.耗材金額=a.耗材金額-(d.耗材金額-i.耗材金額) from Group_List as a,inserted as i,deleted as d where a.部件號=i.產品編號 and a.部件號=d.產品編號 and i.產品編號=d.產品編號
for delete,update
as
if not exists (select * from inserted)
update a set a.人工金額=0,a.耗材金額=0 from Group_List as a,deleted as d where a.部件號=d.產品編號
else if update (人工金額) or update(耗材金額)
update a set a.人工金額=a.人工金額-(d.人工金額-i.人工金額),a.耗材金額=a.耗材金額-(d.耗材金額-i.耗材金額) from Group_List as a,inserted as i,deleted as d where a.部件號=i.產品編號 and a.部件號=d.產品編號 and i.產品編號=d.產品編號
#7
你用declare語句 把inserted 及deleted 中的相应字段的值取出来再进行去处理也可以;也可以不用declare語句 而直接用表之间的关联直接进行
#8
vinsonshen(猪骨褒咸鱼->味道没得顶):謝謝你的指點,我用你的方法雖然解決了修改問題,但我想List新增一筆同一產蛙鳴蟬噪品編號的"人工金額"或"耗材金額"時,在 Group_List中卻沒有反應,在觸發器中我作了相應的修改
for insert,delete,update
as
if not exists (select * from inserted)
update a set a.人工金額=0,a.耗材金額=0 from Group_List as a,deleted as d where a.部件號=d.產品編號
else if update (人工金額) or update(耗材金額)
update a set a.人工金額=a.人工金額-(d.人工金額-i.人工金額),a.耗材金額=a.耗材金額-(d.耗材金額-i.耗材金額) from Group_List as a,inserted as i,deleted as d where a.部件號=i.產品編號 and a.部件號=d.產品編號 and i.產品編號=d.產品編號
else if insert (人工金額) or insert(耗材金額)
update a set a.人工金額=a.人工金額+(d.人工金額+i.人工金額),a.耗材金額=a.耗材金額+(d.耗材金額+i.耗材金額) from Group_List as a,inserted as i,deleted as d where a.部件號=i.產品編號 and a.部件號=d.產品編號 and i.產品編號=d.產品編號
這裡要怎樣修改才使它有效,謝謝!
for insert,delete,update
as
if not exists (select * from inserted)
update a set a.人工金額=0,a.耗材金額=0 from Group_List as a,deleted as d where a.部件號=d.產品編號
else if update (人工金額) or update(耗材金額)
update a set a.人工金額=a.人工金額-(d.人工金額-i.人工金額),a.耗材金額=a.耗材金額-(d.耗材金額-i.耗材金額) from Group_List as a,inserted as i,deleted as d where a.部件號=i.產品編號 and a.部件號=d.產品編號 and i.產品編號=d.產品編號
else if insert (人工金額) or insert(耗材金額)
update a set a.人工金額=a.人工金額+(d.人工金額+i.人工金額),a.耗材金額=a.耗材金額+(d.耗材金額+i.耗材金額) from Group_List as a,inserted as i,deleted as d where a.部件號=i.產品編號 and a.部件號=d.產品編號 and i.產品編號=d.產品編號
這裡要怎樣修改才使它有效,謝謝!
#9
為什麼用以上方法,刪除與新增都不行,這是為什麼?
#10
create trigger TR_List on List
for delete,update,insert
as
if not exists (select * from inserted)--删除
update a set a.人工金額=0,a.耗材金額=0 from Group_List as a,deleted as d where a.部件號=d.產品編號
else if not exists (select * from deleted)--插入
update a set a.人工金額=a.人工金額+i.人工金額,a.耗材金額=a.耗材金額+i.耗材金額 from Group_List as a,inserted as i where a.部件號=i.產品編號
else if update (人工金額) or update(耗材金額)--更新
update a set a.人工金額=a.人工金額-(d.人工金額-i.人工金額),a.耗材金額=a.耗材金額-(d.耗材金額-i.耗材金額) from Group_List as a,inserted as i,deleted as d where a.部件號=i.產品編號 and a.部件號=d.產品編號 and i.產品編號=d.產品編號
for delete,update,insert
as
if not exists (select * from inserted)--删除
update a set a.人工金額=0,a.耗材金額=0 from Group_List as a,deleted as d where a.部件號=d.產品編號
else if not exists (select * from deleted)--插入
update a set a.人工金額=a.人工金額+i.人工金額,a.耗材金額=a.耗材金額+i.耗材金額 from Group_List as a,inserted as i where a.部件號=i.產品編號
else if update (人工金額) or update(耗材金額)--更新
update a set a.人工金額=a.人工金額-(d.人工金額-i.人工金額),a.耗材金額=a.耗材金額-(d.耗材金額-i.耗材金額) from Group_List as a,inserted as i,deleted as d where a.部件號=i.產品編號 and a.部件號=d.產品編號 and i.產品編號=d.產品編號
#11
楼主请注意:对于插入新数据那部分,我只是根据你大概意思写的(不知道是否符合你实际需求),你要根据你实际情况在“插入”那部分做适当修改吧
#12
frankwong(黄梓钿--快乐ing新爸爸^_^),謝謝你,但我在運行Check Syntax時提示為Error 207:invalill column name'人工金額'
invalill column name'耗材金額'
下面還有若干行這樣的提示
這是為什麼,你這裡不要declare語句嗎?請指教
//回楼主,错误提示是"人工金额"和"耗材金额"无效,你检查你的表是否有拼写错误.
无效用变量就可以不用呀
invalill column name'耗材金額'
下面還有若干行這樣的提示
這是為什麼,你這裡不要declare語句嗎?請指教
//回楼主,错误提示是"人工金额"和"耗材金额"无效,你检查你的表是否有拼写错误.
无效用变量就可以不用呀
#13
学习! 没有使用就可能会报错
#14
為什麼用這樣的語句同時刪除或更新兩個表中相同的Item號時,總是提示為表中Item號太多:詳細錯誤信息是:Column name 'Item號' appears more than once in the result Column list,語法如下:
CREATE trigger ItemName
on MainItem_List
for delete,update
as
if not exists (select * from inserted)--删除
delete a.Item號 from Zz_List_hp as a,inserted as i where a.Item號=i.產品編號
else if update (產品編號)
update a set a.Item號=d.產品編號,a.Item號=i.產品編號 from Zz_list_hp as a,inserted as i,deleted as d where a.Item號=i.產品編號 and a.Item號=d.產品編號 and i.產品編號=d.產品編號,
這個問題要怎樣解決,謝謝
CREATE trigger ItemName
on MainItem_List
for delete,update
as
if not exists (select * from inserted)--删除
delete a.Item號 from Zz_List_hp as a,inserted as i where a.Item號=i.產品編號
else if update (產品編號)
update a set a.Item號=d.產品編號,a.Item號=i.產品編號 from Zz_list_hp as a,inserted as i,deleted as d where a.Item號=i.產品編號 and a.Item號=d.產品編號 and i.產品編號=d.產品編號,
這個問題要怎樣解決,謝謝
#15
by i.產品編號
) s
where Group_List.產品編號 = s.產品編號
end
go
CREATE TRIGGER List_Total_d
ON List
FOR DELETE
AS
begin
update Group_List
set 人工金額 =isnull(人工金額,0) - isnull(s.人工金額,0)
,耗材金額 =isnull(耗材金額,0)- isnull(s.耗材金額,0)
from (
select 產品編號 ,sum(人工金額) 人工金額
,sum(耗材金額) 耗材金額
from delete
group by 產品編號
) s
where Group_List.產品編號 = s.產品編號
end
) s
where Group_List.產品編號 = s.產品編號
end
go
CREATE TRIGGER List_Total_d
ON List
FOR DELETE
AS
begin
update Group_List
set 人工金額 =isnull(人工金額,0) - isnull(s.人工金額,0)
,耗材金額 =isnull(耗材金額,0)- isnull(s.耗材金額,0)
from (
select 產品編號 ,sum(人工金額) 人工金額
,sum(耗材金額) 耗材金額
from delete
group by 產品編號
) s
where Group_List.產品編號 = s.產品編號
end
#16
--你试试
CREATE TRIGGER List_Total_u
ON List
FOR UPDATE
AS
if update(人工金額) or update(產品編號) or update(耗材金額 )
begin
update Group_List
set 人工金額 =isnull(人工金額,0) + isnull(s.人工金額,0)
,耗材金額 =isnull(耗材金額,0)+ isnull(s.耗材金額,0)
from (
select i.產品編號 ,sum(i.人工金額-d.人工金額) 人工金額
,sum(i.耗材金額 - d.耗材金額) 耗材金額
from delete d,insert i
where d.id=i.id
group by i.產品編號
) s
where Group_List.產品編號 = s.產品編號
end
go
CREATE TRIGGER List_Total_d
ON List
FOR DELETE
AS
begin
update Group_List
set 人工金額 =isnull(人工金額,0) - isnull(s.人工金額,0)
,耗材金額 =isnull(耗材金額,0)- isnull(s.耗材金額,0)
from (
select 產品編號 ,sum(人工金額) 人工金額
,sum(耗材金額) 耗材金額
from delete
group by 產品編號
) s
where Group_List.產品編號 = s.產品編號
end
CREATE TRIGGER List_Total_u
ON List
FOR UPDATE
AS
if update(人工金額) or update(產品編號) or update(耗材金額 )
begin
update Group_List
set 人工金額 =isnull(人工金額,0) + isnull(s.人工金額,0)
,耗材金額 =isnull(耗材金額,0)+ isnull(s.耗材金額,0)
from (
select i.產品編號 ,sum(i.人工金額-d.人工金額) 人工金額
,sum(i.耗材金額 - d.耗材金額) 耗材金額
from delete d,insert i
where d.id=i.id
group by i.產品編號
) s
where Group_List.產品編號 = s.產品編號
end
go
CREATE TRIGGER List_Total_d
ON List
FOR DELETE
AS
begin
update Group_List
set 人工金額 =isnull(人工金額,0) - isnull(s.人工金額,0)
,耗材金額 =isnull(耗材金額,0)- isnull(s.耗材金額,0)
from (
select 產品編號 ,sum(人工金額) 人工金額
,sum(耗材金額) 耗材金額
from delete
group by 產品編號
) s
where Group_List.產品編號 = s.產品編號
end
#17
"為什麼用這樣的語句同時刪除或更新兩個表中相同的Item號時,總是提示為表中Item號太多:詳細錯誤信息是:
Column name 'Item號' appears more than once in the result Column list"
-------------------------------------------------------------------
改成这样试试:
CREATE trigger ItemName
on MainItem_List
for delete,update
as
if not exists (select * from inserted)--删除
-- delete a.Item號 from Zz_List_hp as a,inserted as i where a.Item號=i.產品編號 (语法有误:delete 表 where 条件)改成下面的:
delete a from Zz_List_hp as a,deleted as d where a.Item號=d.產品編號
else if update (產品編號)
/*
update a set a.Item號=d.產品編號,a.Item號=i.產品編號 from Zz_list_hp as a,inserted as i,deleted as d
where a.Item號=i.產品編號 and a.Item號=d.產品編號 and i.產品編號=d.產品編號
*/--这句应该改成这样:
update a set a.Item號=i.產品編號 from Zz_list_hp as a,inserted as i,deleted as d
where a.Item號=i.產品編號 and a.Item號=d.產品編號 and i.產品編號=d.產品編號
--上面的我不知道你具体的需求,可以只大概改了成可以正确运行的SQL,操作结果是否满足你需求,楼主你自己适当改改吧。楼主,你SQL基本语法得再多多看看
Column name 'Item號' appears more than once in the result Column list"
-------------------------------------------------------------------
改成这样试试:
CREATE trigger ItemName
on MainItem_List
for delete,update
as
if not exists (select * from inserted)--删除
-- delete a.Item號 from Zz_List_hp as a,inserted as i where a.Item號=i.產品編號 (语法有误:delete 表 where 条件)改成下面的:
delete a from Zz_List_hp as a,deleted as d where a.Item號=d.產品編號
else if update (產品編號)
/*
update a set a.Item號=d.產品編號,a.Item號=i.產品編號 from Zz_list_hp as a,inserted as i,deleted as d
where a.Item號=i.產品編號 and a.Item號=d.產品編號 and i.產品編號=d.產品編號
*/--这句应该改成这样:
update a set a.Item號=i.產品編號 from Zz_list_hp as a,inserted as i,deleted as d
where a.Item號=i.產品編號 and a.Item號=d.產品編號 and i.產品編號=d.產品編號
--上面的我不知道你具体的需求,可以只大概改了成可以正确运行的SQL,操作结果是否满足你需求,楼主你自己适当改改吧。楼主,你SQL基本语法得再多多看看
#18
deodarsydn(deodar):謝謝你的指點,我的意思是刪除Group_Listk中部件號001時同時刪除List中兩個產品編號001,而不是你所說的數減少,是徹底刪除,
#19
frankwong(黄梓钿--快乐ing新爸爸^_^),謝謝你,但我在運行Check Syntax時提示為Error 207:invalill column name'人工金額'
invalill column name'耗材金額'
下面還有若干行這樣的提示
這是為什麼,你這裡不要declare語句嗎?請指教
//回楼主,错误提示是"人工金额"和"耗材金额"无效,你检查你的表是否有拼写错误.
无效用变量就可以不用呀
===================================
据我发现:“set 人工金额=(人工金额-b.人工金额+c.人工金额),耗材金额=(耗材金额-b.耗材金额+c.产品编号) ”
这句后面的算“耗材金额”是否错了,后面加的那个不是“c.产品编号” 而应该是“c.耗材金额”
invalill column name'耗材金額'
下面還有若干行這樣的提示
這是為什麼,你這裡不要declare語句嗎?請指教
//回楼主,错误提示是"人工金额"和"耗材金额"无效,你检查你的表是否有拼写错误.
无效用变量就可以不用呀
===================================
据我发现:“set 人工金额=(人工金额-b.人工金额+c.人工金额),耗材金额=(耗材金额-b.耗材金额+c.产品编号) ”
这句后面的算“耗材金额”是否错了,后面加的那个不是“c.产品编号” 而应该是“c.耗材金额”
#20
vinsonshen(猪骨褒咸鱼->味道没得顶):謝謝你的指點和建義,刪除我用if not exists (select * from inserted)--删除
delete a from Zz_List_hp as a,deleted as i where a.Item號=i.產品編號
已解決了但修改時用你的
else if update (產品編號)
update a set a.Item號=i.產品編號 from Zz_list_hp as a,inserted as i,deleted as d
where a.Item號=i.產品編號 and a.Item號=d.產品編號 and i.產品編號=d.產品編號還是不行,再有就是在List沒有與Group_List中相同的產品編號時刪除,插入,修改都會報錯,這要在前面加一條什麼樣的判斷語句,謝謝!如果分不夠我再一個帖。
delete a from Zz_List_hp as a,deleted as i where a.Item號=i.產品編號
已解決了但修改時用你的
else if update (產品編號)
update a set a.Item號=i.產品編號 from Zz_list_hp as a,inserted as i,deleted as d
where a.Item號=i.產品編號 and a.Item號=d.產品編號 and i.產品編號=d.產品編號還是不行,再有就是在List沒有與Group_List中相同的產品編號時刪除,插入,修改都會報錯,這要在前面加一條什麼樣的判斷語句,謝謝!如果分不夠我再一個帖。
#21
up