日期:2014-05-19  浏览次数:20399 次

都忘记触发器该怎么样写,请高手帮忙啦!
就是插入数据进表A的时候,同时更新一个表B里面的数据,但是B里面的数据有个字段是表A中的,这个怎么写啊?

------解决方案--------------------
没有装sql,不能给你完整的代码
看看帮助文档吧

create trigger tri_Insert_A
on A
for each row
begin
update B
set field = ' '
from B, inserted
where B.filedn = inserted .filedn
end

大概这个意思
------解决方案--------------------
-- 创建测试表x
create table x(
x_sysno int identity(1,1),
x_id varchar(20) primary key,
x_name varchar(20),
x_yname varchar(20) default null
)

-- 创建测试表y
create table y(
y_sysno int identity(1,1),
y_xid varchar(20) references x(x_id),
y_name varchar(20) not null
)

-- 测试数据x
insert into x(x_id,x_name)
select 'xid1 ', 'xname1 ' union all
select 'xid2 ', 'xname2 ' union all
select 'xid3 ', 'xname3 '

-- 创建触发器(当y插入数据时,更新x表的x_yname字段)
create trigger trFillName_I on y
after insert
as
update x
set x.x_yname = i.y_name
from x
join inserted i on x.x_id = i.y_xid

-- 开始插入
insert into y values( 'xid1 ', 'yname1 ')
insert into y values( 'xid2 ', 'yname2 ')

-- 结果
x_sysno x_id x_name x_yname
----------- -------------------- -------------------- --------------------
1 xid1 xname1 yname1
2 xid2 xname2 yname2
3 xid3 xname3 NULL
------解决方案--------------------
--创建测试环境
Create Table A(id int,name varchar(8),class varchar(10))
insert A select 1, '张三 ', '一班 '
Create Table B(class varchar(10),value int)
insert B select '一班 ',1
--查看测试环境
select * from a
select * from b
---创建触发器
Create Trigger Tri_Insert ON A
For Insert
as
begin
if exists(select 1 from B inner join inserted i on B.class=i.class)
update B set value=value+1 from b,inserted i where b.class=i.class
else
insert b select class,1 from inserted
end
GO
----向A表中插入数据
insert A select 2, '李四 ', '一班 '
insert A select 3, '王五 ', '二班 '
insert A select 4, '刘七 ', '一班 '
----查询结果
select * from a
select * from b
/*
class value
---------- -----------
一班 3
二班 1

(所影响的行数为 2 行)
*/
------解决方案--------------------
---创建触发器
Create Trigger Tri_Insert ON A
For Insert
as
begin
if exists(select 1 from B inner join inserted i on B.class=i.class)
/*为保证AB表数据同步,当向A表插入数据时
     B表如果存在相同class则更新B表,更新相同class的value
     否则向B表插入数据*/
update B set value=value+1 from b,inserted i where b.class=i.class
else
insert b select class,1 from inserted
end
GO