用替代触发器:create table a (a int,aa varchar(100)) create table b (b int,bb varchar(100)) go create view c as select a.*,b.* from a,b where a.a=b.b go--测试: insert c values(1,'aa',1,'bb') --失败go CREATE TRIGGER 名 on c INSTEAD OF INSERT AS BEGIN INSERT a select a,aa from inserted INSERT b select b,bb from inserted END go--测试: insert c values(1,'aa',1,'bb')
大力兄:我不怎麼明白啊,先要建個視圖嗎,然後再在視圖上建觸發器嗎, 我是要在 update 表 A 時,把 A 表的 code 值賦給 同時 insert 的 表B 的數條記錄的 code 值,刪除 A 表時 ,也把 B 表相同的 Code 值的記錄刪掉,謝了!
你可以在两个表之间建立约束关系,进行级联删除的。 例如 alter table b add constraint b_f_key foreign key(b) reference a(a) on delete cascade 删除时只要delete a where a=code b表相应code的纪录同时删除开心就好!!!!
方法1:alter table a add constraint fk_a_to_b foreign key references b(col) ON UPDATE CASCADE on delete cascade 连级更新create table 主表 (商品编号 varchar(20) not null PRIMARY KEY CLUSTERED , 商品名称 varchar(20) UNIQUE NONCLUSTERED , 数量 int ) create table 主表1 (商品编号 varchar(20) not null PRIMARY KEY CLUSTERED , 商品名称 varchar(20) UNIQUE NONCLUSTERED , 数量 int ) create table 次表 (商品编号 varchar(20) not null , 商品名称 varchar(20) not null primary key ( 商品编号,商品名称 ) FOREIGN KEY (商品编号) REFERENCES 主表 (商品编号) ON DELETE CASCADE ON UPDATE CASCADE , FOREIGN KEY ( 商品名称) rEFERENCES 主表1 (商品编号) ON DELETE CASCADE ON UPDATE CASCADE , 供应商 varchar(20) )insert 主表 select '003','aa',77insert 主表1 select '104','bb',17insert 次表 select '003','104','y'update 主表1 set 商品编号='105'update 主表 set 商品编号='004' select * from 次表
方法2:CREATE TRIGGER 名1 ON dbo.tabMain FOR INSERT AS insert db2..tabSlave select * from insertedCREATE TRIGGER 名2 ON dbo.tabMain FOR update AS update db2..tabSlave set 列=aa.列 from inserted aa where aa.编号=db2..tabSlave.编号 CREATE TRIGGER 名3 ON dbo.tabMain FOR delete AS delete db2..tabSlave where 编号 in (select 编号 from deleted)
你可以用级联更新莱做我不怎麼明白啊,先要建個視圖嗎,然後再在視圖上建觸發器嗎视图只支持INSTEAD OF 触发器,如果你是视图 要这么做CREATE TRIGGER abcadd ON abc –视图名 FOR INSERT AS INSERT INTO abc1 –另一个表 SELECT * FROM inserted ins 会报错: 对象abc不存在,而视图abc确实命名存在的。 CREATE TRIGGER abcadd ON abc INSTEAD OF INSERT AS INSERT INTO abc SELECT * FROM inserted ins INSERT INTO abc1 SELECT * FROM inserted ins
你可以用级联更新莱做我不怎麼明白啊,先要建個視圖嗎,然後再在視圖上建觸發器嗎视图只支持INSTEAD OF 触发器,如果你是视图 要这么做CREATE TRIGGER abcadd ON abc –视图名 FOR INSERT AS INSERT INTO abc1 –另一个表 SELECT * FROM inserted ins 会报错: 对象abc不存在,而视图abc确实命名存在的。 CREATE TRIGGER abcadd ON abc INSTEAD OF INSERT AS INSERT INTO abc SELECT * FROM inserted ins INSERT INTO abc1 SELECT * FROM inserted ins
create table b (b int,bb varchar(100))
go
create view c
as
select a.*,b.* from a,b where a.a=b.b
go--测试:
insert c values(1,'aa',1,'bb')
--失败go
CREATE TRIGGER 名 on c
INSTEAD OF INSERT
AS
BEGIN
INSERT a select a,aa from inserted
INSERT b select b,bb from inserted
END
go--测试:
insert c values(1,'aa',1,'bb')
我是要在 update 表 A 時,把 A 表的 code 值賦給 同時 insert 的 表B 的數條記錄的
code 值,刪除 A 表時 ,也把 B 表相同的 Code 值的記錄刪掉,謝了!
例如 alter table b
add constraint b_f_key foreign key(b) reference a(a)
on delete cascade
删除时只要delete a where a=code b表相应code的纪录同时删除开心就好!!!!
连级更新create table 主表
(商品编号 varchar(20) not null PRIMARY KEY CLUSTERED ,
商品名称 varchar(20) UNIQUE NONCLUSTERED ,
数量 int
)
create table 主表1
(商品编号 varchar(20) not null PRIMARY KEY CLUSTERED ,
商品名称 varchar(20) UNIQUE NONCLUSTERED ,
数量 int
)
create table 次表
(商品编号 varchar(20) not null ,
商品名称 varchar(20) not null
primary key ( 商品编号,商品名称 )
FOREIGN KEY (商品编号) REFERENCES 主表 (商品编号)
ON DELETE CASCADE ON UPDATE CASCADE ,
FOREIGN KEY ( 商品名称) rEFERENCES 主表1 (商品编号)
ON DELETE CASCADE ON UPDATE CASCADE ,
供应商 varchar(20)
)insert 主表 select '003','aa',77insert 主表1 select '104','bb',17insert 次表 select '003','104','y'update 主表1 set 商品编号='105'update 主表 set 商品编号='004'
select * from 次表
FOR INSERT
AS
insert db2..tabSlave select * from insertedCREATE TRIGGER 名2 ON dbo.tabMain
FOR update
AS
update db2..tabSlave set 列=aa.列 from inserted aa where aa.编号=db2..tabSlave.编号
CREATE TRIGGER 名3 ON dbo.tabMain
FOR delete
AS
delete db2..tabSlave where 编号 in (select 编号 from deleted)
FOR INSERT
AS
INSERT INTO abc1 –另一个表
SELECT * FROM inserted ins
会报错: 对象abc不存在,而视图abc确实命名存在的。
CREATE TRIGGER abcadd ON abc
INSTEAD OF INSERT
AS
INSERT INTO abc SELECT * FROM inserted ins
INSERT INTO abc1 SELECT * FROM inserted ins
FOR INSERT
AS
INSERT INTO abc1 –另一个表
SELECT * FROM inserted ins
会报错: 对象abc不存在,而视图abc确实命名存在的。
CREATE TRIGGER abcadd ON abc
INSTEAD OF INSERT
AS
INSERT INTO abc SELECT * FROM inserted ins
INSERT INTO abc1 SELECT * FROM inserted ins