在一条SQL语句中向2个表中插入数据解决方案

本文详细介绍了如何在SQL语句中同时向两个表插入数据,并通过数据库事务确保数据同步。包括创建存储过程、使用ADO.NET进行操作以及利用@@identity获取自增ID的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在一条SQL语句中向2个表中插入数据
表1   名称Bulletin,字段BulletinId(主键),Title,Content,Publisher 
表2   名称ButtetinAuth,字段BulletinId(主键),UserId 
怎么在一条SQL语句中想2个表中插入数据 
请写具体点 

2条SQL语句也可以,但要同步 



create PROCEDURE [存储过程名] 

@Title nvarchar(50), 
@Content nvarchar(1000), 
@Publisher nvarchar(200), 
@UserID varchar(10)

AS 
BEGIN 
declare @posid int 
SET NOCOUNT ON 

begin transaction [事务名称] 

insert into Bulletin(....) --向Bulletin表添加记录 

if @@error $amp;<amp;$gt; 0=""
 begin 
rollback transaction [事务名称] 
select N '添加失败! ' as msg 
return(0) 
end 
set @posid = @@identity --得到BulletinId的值 


insert into ButtetinAuth(....) --向ButtetinAuth表添加记录 

if @@error $amp;<amp;$gt; 0=""
 begin 
rollback transaction [事务名称] 
select N '添加失败! ' as msg 
return(0) 
end 

commit transaction [事务名称] 
select N '添加成功! ' as msg 

END 
guanweifeng     2014-06-23        
评价(0)(0)(0)

"insert 表1;insert 表2 "这种方式是可以,但不能保证同步(如插入第一个表后就停电了,第二个表还没来得及插入,所以就不同步了),要数据同步就要用数据库事务。 

private SqlConnection myConn = new SqlConnection(); //连接 
private SqlTransaction Transaction = null; //事务 
private SqlCommand Cmd = new SqlCommand(); 

假设myConn已经配置好 

事务开始: 
try 

myConn.Open(); 
Transaction = myConn.BeginTransaction(); //事务开始 
Cmd.Transaction = Transaction; //将Cmd指向Transaction事务 

string strSQL= "insert 表1 "; 
Cmd.CommandText = strSQL; //插入第一个表 
Cmd.ExecuteNonQuery(); 

strSQL= "insert 表2 "; 
Cmd.CommandText = strSQL; //插入第一个表 
Cmd.ExecuteNonQuery(); 

Transaction.Commit(); //提交事务 


catch (Exception e) 

Transaction.Rollback(); //撇消事务 
throw new Exception(e.Message); 
}



SQL Server里可以使用@@identity来获取刚刚生成的那个自增长的Id
你insert A之后立刻select @a=@@identity,然后把@a插入到表B就可以了。
当然,你也可以用触发器,对A的after insert触发器,在触发器里面有inserted表,在其中可以得到刚刚插入的那一行的数据,取出来,图片ID,插入B,但问题是,你要插入B的其他数据在触发器中如何得到,因为要插入B的数据,不都在A中,因此这么做很麻烦。不如第一个方法简单。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值