经常会有这样的操作:
Table1 (ID,Column1)
Table2 (ID,Table1ID,Column1,Column2,Column3...)
Table1与Table2是父子关系,插入到Table1后,需要返回当前的ID号,在插入Table2时使用,如果用
Select Max(ID) From Table1的话,效率很低,并且并发操作时,值会不准确,直到发现了 SCOPE_IDENTITY ,后,这个问题就迎刃而解了。
首先来看一下会话的概念:
会话: 一个用户连接产生的所有上下文信息
两个会话应该是相互独立的,SCOPE_IDENTITY :返回当前会话当前作用域任何表生成的最后一个标识值 。
也就是说,如果产生了两个会话,这两个会话的SCOPE_IDENTITY 是互不干扰的。利用这一特点,可以编写下面的SQL语句来实现上面的操作:
Declare @ID as int
Insert into Table1 Values('111')
Select @ID = Scope_Identity()
Insert into Table2 Values(@ID,....)