首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

sql向两张表插入记录的有关问题

2012-04-09 
sql向两张表插入记录的问题谢谢现在有两张表,在插入A表的时候需要向B表插入一个操作记录,B表中的主码需要

sql向两张表插入记录的问题
谢谢
现在有两张表,在插入A表的时候需要向B表插入一个操作记录,B表中的主码需要手动输入,怎样设A表的插入触发器满足这个要求?

[解决办法]
create trigger trg_a2b on a for insert as
begin
insert into b select * from deleted
end
[解决办法]
在A表写触发器
create trigger trg_a2b on a for insert as 
begin 
insert into b select * from deleted 
end
[解决办法]

SQL code
create trigger trg_a2b on a for insert as begin   insert into b select * from INSERTEDend
[解决办法]
现在有两张表,在插入A表的时候需要向B表插入一个操作记录(此時很容易實現)
B表中的主码需要手动输入,怎样设A表的插入触发器满足这个要求?
b中的主碼要手工輸入,那就你查詢出插入的值然後再更新一次啦!
因為要手工輸入主碼--這點就證明触發器只能估一半工作


[解决办法]
引用楼主 bao86 的帖子:
谢谢
现在有两张表,在插入A表的时候需要向B表插入一个操作记录,B表中的主码需要手动输入,怎样设A表的插入触发器满足这个要求?

[解决办法]
这个问题你不需要考滤太多。

一个dml语句引发的触发器过程与dml语句在同一个会话里,只不过是不同的作用域。
如果b表插入时出错,直接roll back就可以了,dml语句同样被回滚。

SQL code
create table t1(a int)gocreate table t2(b int)gocreate trigger t1_r on t1for insertasbegin    --commit    insert t2 select a*10000000 from insertedendgoinsert t1 select 1354goselect * from t1select * from t2/*均为空。说明t1,t2都未能插入数据。除非显式在出错语句前提交. 去掉commit的注释后,才会看到t1有一行数据。instead of,for,after之间有一些差异我就不再多说了,自己体会吧*/godrop table t1,t2go
[解决办法]
create table A
(
a int primary key
)
go
create table B
(
b int ,
c nchar(50) not null,
foreign key(b) references A(a)
)
go



在向A表插入一个记录的时候必须向B表也插入一个相应的操作记录,B表中的"c"为操作理由,需要手动输入,怎样设A表或B表的"INSERT"触发器或事务满足这个要求?

写个存储过程

create proc myprocedure
(@a int,@b int,@c nchar(50))
as
begin tran
insert into A (a) values (@a)
if @@error>0
begin
rollback tran
return
end
insert into B (b,c) values(@b,@c)
if @@error>0
rollback tran
else
commit tran
go

热点排行