方法1:
CREATE TRIGGER ins_trigger
ON kc1
FOR INSERT
AS
if (select count(*) from kc2,
inserted where kc2.k1=inserted.k1)<>0
begin
update kc2
set kc2.k2=(
select
sum(kc1.k2)
from kc1
where kc2.k1=kc1.k1)
end
else
begin
insert kc2 select k1,k2,k3,k4,k5 from inserted
end方法2:
CREATE TRIGGER ins_trigger
ON kc1
FOR INSERT
AS
if (select count(*) from kc2,
inserted where kc2.k1=inserted.k1)<>0
begin
update kc2
set kc2.k2=(
select
sum(inserted.k2)
from inserted
where kc2.k1=inserted.k1)
end
else
begin
insert kc2 select k1,k2,k3,k4,k5 from inserted
end方法1没有问题,但要是遇到kc1表中有几十万条数据则运行起来服务器负担太大
方法2有问题,执行后,kc2表中只有最后执行的一条数据是有效的,表kc2的其他k2列的数据则为null,请问各位这是怎么回事
CREATE TRIGGER ins_trigger
ON kc1
FOR INSERT
AS
if (select count(*) from kc2,
inserted where kc2.k1=inserted.k1)<>0
begin
update kc2
set kc2.k2=(
select
sum(kc1.k2)
from kc1
where kc2.k1=kc1.k1)
end
else
begin
insert kc2 select k1,k2,k3,k4,k5 from inserted
end方法2:
CREATE TRIGGER ins_trigger
ON kc1
FOR INSERT
AS
if (select count(*) from kc2,
inserted where kc2.k1=inserted.k1)<>0
begin
update kc2
set kc2.k2=(
select
sum(inserted.k2)
from inserted
where kc2.k1=inserted.k1)
end
else
begin
insert kc2 select k1,k2,k3,k4,k5 from inserted
end方法1没有问题,但要是遇到kc1表中有几十万条数据则运行起来服务器负担太大
方法2有问题,执行后,kc2表中只有最后执行的一条数据是有效的,表kc2的其他k2列的数据则为null,请问各位这是怎么回事
解决方案 »
- 根据条件 求相邻的两条数据的某字段的差
- 寻找SQL Server 2000与Asp Web数据库编程技术
- 大家帮看一个SQL问题,在线等~ 多谢
- 跪求 关于两个表之间操作的SQL 语句
- 关于联表查询的问题,大家多多帮忙啊
- 求助SQL存储过程
- 请哪位大虾把我看看---很奇怪的问题。
- ftp://aspxdown:[email protected]/upload/C%23%20by%20pan/网页上《C#完全手册》的打开方式是什么呀,后缀名是.pdf--要安装什么软
- sql server怎么修改表的所有者?
- 高手,请问如何这样增加记录!100分
- LIKE应用,急求!!
- 这样的查询语句要怎么写呀?
方法2中第9行为set kc2.k2=kc2.k2+(
的update改为
update kc2
set k2=k2+(select isnull(sum(k2),0) from inserted where k1=kc2.k1)
where exists(select * from inserted where k1=kc2.k1)注意加上where 语句,这样kc2的记录就不用全部更新变为null的原因,因为每列都更新,(select sum()...)中有很多返回null值,值+null会变为null其实,如果每次添加的记录为一条,可改为
update kc2
set k2=k2+isnerted.k2
from kc2,inserted where kc2.k1=inserted.k1