2015-07-22 74 views
0

我的第一个表唯一键是子表中的外键,我使用的是存储过程中的事务,当我使用事务时出现问题然后第一个表被插入的唯一键显示之前没有值提交查询和第二个表的数据插入我需要在第一个表中插入行的唯一键。 我会在where子句中使用select查询。但我的面试官说,告诉我一些其他的方式来实现这一点,他说他不能写100张桌子的“select where”语句。如何在多个表中使用事务插入数据

+2

在过程中使用循环。告诉我你的代码,也许我可以帮你 – starko

回答

3

在这种情况下,您将使用SCOPE_IDENTITY()函数检索父表中新插入行的标识。您的脚本应如下所示:

begin transaction 
declare @parentId int; 
insert into ParentTable(Value1, Value2) values('1', '2') 

select @parentId = SCOPE_IDENTITY() 
insert into ChildTable(ParentId, Value) values(@parentId, '3') 
commit 
+0

哇,这听起来不错,但是当主键列上的isIdentity设置为false时,我可以使用这个范围标识。 –

+0

,因为对于唯一的主键,我使用自己的逻辑来创建PK不使用标识列 –

+0

@BRBHARDWAJ,如果您使用自定义逻辑创建PK值,那么您不需要'scope_identity()'。只需将'@ parentId'作为参数传递给存储过程即可。 – RePierre