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

在一条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中,因此这么做很麻烦。不如第一个方法简单。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在SQL Server中,删除一条数据不会导致自增列重置。自增列的值是根据表中已有的最大值自动递增生成的,而不是根据表中已删除的行数来计算的。因此,如果想在已有数据的基础上自增ID,可以通过以下步骤实现: 1. 首先,创建一个新表,结构与原表相同,但没有数据。 2. 将原表的数据插入到新表中。 3. 查询更新后的新表,即可看到自增ID已经在已有数据的基础上递增。 具体的SQL语句如下: ``` -- 创建一个新表,结构与原表相同,但没有数据 CREATE TABLE \[dbo\].\[NewTable\]( \[ID\] \[INT\] IDENTITY(1,1) NOT NULL, \[TabbleName\] \[VARCHAR\](50) NOT NULL, \[ColuntName\] \[VARCHAR\](50) NOT NULL, \[说明\] \[VARCHAR\](255) NULL ) -- 将原表的数据插入到新表中 INSERT INTO dbo.NewTable SELECT TabbleName, ColuntName, \[说明\] FROM dbo.Info_Xinxi -- 查询更新后的新表 SELECT * FROM dbo.NewTable ``` 通过以上步骤,你可以在已有数据的基础上实现自增ID。 #### 引用[.reference_title] - *1* *2* *3* [SQL Server ID 自增不连续、删除任意列数据后ID不连续的解决方案。](https://blog.csdn.net/m0_74824913/article/details/131032420)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值