CREATE TRIGGER trig_L1 ON dbo.L1
FOR INSERT, UPDATE
AS
update L2 set L2.数量 = L2.数量 + inserted.数量,L2.总价 = L2.总价+inserted.总价 from inserted where L2.类别 = inserted.类别 and L2.项目 = inserted.项目 and L2.品名 = inserted.品名 and L2.规格 = inserted.规格 and L2.单位 = inserted.单位 and L2.单价 = inserted.单价
update L2 set L2.数量 = L2.数量 + inserted.数量,L2.总价 = L2.总价+inserted.总价,L2.单价 = 0 from inserted where L2.类别 = inserted.类别 and L2.项目 = inserted.项目 and L2.品名 = inserted.品名 and L2.规格 = inserted.规格 and L2.单位 = inserted.单位 and L2.单价 <> inserted.单价
FOR INSERT, UPDATE
AS
update L2 set L2.数量 = L2.数量 + inserted.数量,L2.总价 = L2.总价+inserted.总价 from inserted where L2.类别 = inserted.类别 and L2.项目 = inserted.项目 and L2.品名 = inserted.品名 and L2.规格 = inserted.规格 and L2.单位 = inserted.单位 and L2.单价 = inserted.单价
update L2 set L2.数量 = L2.数量 + inserted.数量,L2.总价 = L2.总价+inserted.总价,L2.单价 = 0 from inserted where L2.类别 = inserted.类别 and L2.项目 = inserted.项目 and L2.品名 = inserted.品名 and L2.规格 = inserted.规格 and L2.单位 = inserted.单位 and L2.单价 <> inserted.单价
您写的触发器我研究了一下!真是太谢谢你了!呵呵!
但,我发现一个问题,就是(如果L2中没有符合条件的记录,则把L1中的记录直接写到L2中。)这一句的功能没有实现,应该怎么做?需不需要在在这个L2中建立一个新的触发器,然后INSERT???还是直接在原有的上。???
语句应该怎么写??
谢谢!!!!
FOR INSERT, UPDATE, DELETE
AS
if not exists(select 0 from L2 where L2.类别 = inserted.类别 and L2.项目 = inserted.项目 and L2.品名 = inserted.品名 and L2.规格 = inserted.规格 and L2.单位 = inserted.单位)
begin
--以下這個只是適用於單筆增加L1時可用, 否則需要用游標
insert into L2(类别,项目,品名,规格,单位,数量,单价,总价)
values(inserted.类别项目, inserted.品名, inserted.规格, inserted.单位, inserted.数量, inserted.单价, inserted.总价)
end
else
begin
--如果修改需要減掉舊值
update L2 set L2.数量 = L2.数量 - deleted.数量,L2.总价 = L2.总价- deleted.总价
from inserted where L2.类别 = inserted.类别 and L2.项目 = inserted.项目 and L2.品名 = inserted.品名 and L2.规格 = inserted.规格 and L2.单位 = inserted.单位 update L2 set L2.数量 = L2.数量 + inserted.数量,L2.总价 = L2.总价+inserted.总价
from inserted where L2.类别 = inserted.类别 and L2.项目 = inserted.项目 and L2.品名 = inserted.品名 and L2.规格 = inserted.规格 and L2.单位 = inserted.单位
and L2.单价 = inserted.单价
update L2 set L2.数量 = L2.数量 + inserted.数量,L2.总价 = L2.总价+inserted.总价,L2.单价 = 0
from inserted where L2.类别 = inserted.类别 and L2.项目 = inserted.项目 and L2.品名 = inserted.品名 and L2.规格 = inserted.规格 and L2.单位 = inserted.单位
and L2.单价 <> inserted.单价
end
以下這句應該放在if not exists(...之前--如果修改需要減掉舊值
update L2 set L2.数量 = L2.数量 - deleted.数量,L2.总价 = L2.总价- deleted.总价
from inserted where L2.类别 = inserted.类别 and L2.项目 = inserted.项目 and L2.品名 = inserted.品名 and L2.规格 = inserted.规格 and L2.单位 = inserted.单位
update L2 set L2.数量 = L2.数量 - deleted.数量,L2.总价 = L2.总价- deleted.总价
from deleted where L2.类别 = deleted.类别 and L2.项目 = deleted.项目 and L2.品名 = deleted.品名 and L2.规格 = deleted.规格 and L2.单位 = deleted.单位
我才学SQL就遇到了这样的麻烦!!
谢谢您能帮助我!
谢谢!
begin
--以下這個只是適用於單筆增加L1時可用, 否則需要用游標
insert into L2(类别,项目,品名,规格,单位,数量,单价,总价)
values(inserted.类别项目, inserted.品名, inserted.规格, inserted.单位, inserted.数量, inserted.单价, inserted.总价)
end这段中有错误啊!
values(inserted.类别项目, inserted.品名, inserted.规格, inserted.单位, inserted.数量, inserted.单价, inserted.总价)
报错为:类别,项目。不能做为表中的列,只能是变量,表达式。。
怎么解决啊??
CREATE TRIGGER trig_L1 ON dbo.L1
FOR INSERT
AS
update L2 set L2.数量 = L2.数量 + inserted.数量,
L2.总价 = L2.总价 + inserted.总价,
L2.单价 = case when L2.单价 = inserted.单价
then L2.单价
else 0 end
from inserted
where L2.类别 = inserted.类别 and
L2.项目 = inserted.项目 and
L2.品名 = inserted.品名 and
L2.规格 = inserted.规格 and
L2.单位 = inserted.单位if @@rowcount = 0
insert into L2(类别,项目,品名,规格,单位,数量,单价,总价)
select 类别,项目,品名,规格,单位,数量,单价,总价
from inserted
CREATE TRIGGER trig_L1 ON dbo.L1
FOR INSERT
AS
update L2 set L2.数量 = L2.数量 + inserted.数量,
L2.总价 = L2.总价 + inserted.总价,
L2.单价 = case when L2.单价 = inserted.单价
then L2.单价
else 0 end
from inserted
where L2.类别 = inserted.类别 and
L2.项目 = inserted.项目 and
L2.品名 = inserted.品名 and
L2.规格 = inserted.规格 and
L2.单位 = inserted.单位 insert into L2(类别,项目,品名,规格,单位,数量,单价,总价)
select 类别,项目,品名,规格,单位,sum(数量),
单价 = case count(distinct 单价) when 1 then max(单价)
else 0 end,
sum(总价)
from inserted
where 类别+项目+品名+规格+单位 not in
(select 类别+项目+品名+规格+单位 from L2)
group by 类别,项目,品名,规格,单位注:如果类别、项目、品名、规格、单位有空值,或有varchar类型,最后的where语句应作相应修改: ltrim(rtrim(isnull(类别,'')))+......
CREATE TRIGGER trig_L1 ON dbo.L1
FOR INSERT
AS
update L2 set L2.数量 = L2.数量 + T3.数量,
L2.总价 = L2.总价 + T3.总价,
L2.单价 = case when L2.单价 = T3.单价
then L2.单价
else 0 end
from (select 类别,项目,品名,规格,单位,数量=sum(数量),
单价 = case count(distinct 单价) when 1 then max(单价)
else 0 end,
总价=sum(总价)
from inserted
group by 类别,项目,品名,规格,单位) as T3
where L2.类别 = T3.类别 and
L2.项目 = T3.项目 and
L2.品名 = T3.品名 and
L2.规格 = T3.规格 and
L2.单位 = T3.单位insert into L2(类别,项目,品名,规格,单位,数量,单价,总价)
select 类别,项目,品名,规格,单位,sum(数量),
单价 = case count(distinct 单价) when 1 then max(单价)
else 0 end,
sum(总价)
from inserted
where 类别+项目+品名+规格+单位 not in
(select 类别+项目+品名+规格+单位 from L2)
group by 类别,项目,品名,规格,单位注:如果类别、项目、品名、规格、单位有空值,或有varchar类型,最后的where语句应作相应修改: ltrim(rtrim(isnull(类别,'')))+......