在SQL Server 2005中,我使用存储过程将一行插入到表中,并且我想在插入该行后立即获取新的主键值。我使用下面的方法来获取插入一行之后主键值在SQL Server 2005中插入行后的主键值
Create Proc Sp_Test
@testEmail varchar(20)=null,-- Should be Unique
@testName varchar(20)=null -- Should be Unique
as
begin
insert into tableTest (testUserEmail,testUserName)values (@testValue,@testName)
select MAX(ID) from tableTest --ID is Primary Key
--or
select ID from tableTest where testUserEmail [email protected] and testUserName = @testName
--or
select SCOPE_IDENTITY() as ID
end
请建议我哪种方法是更好地进行描述任务。
Thanks marc_s fro reply ... U told“如果您有多个客户端几乎同时插入行,那么使用MAX(ID)的第一种方法将会非常糟糕 - 您将得到错误的结果。那个!“......但是我在脑海里有一个问题,如果多个用户插入的行比sql语句集合中的每个客户端都要分别执行.until过程结束块 –
@Shailesh Sahu:** NO!* *如果你没有任何显式的事务(你不知道),那么'INSERT'语句本身就是一个隐含的事务。一旦运行,其他客户端可以读取这些值 - 如果您有数百个客户端同时插入,则可以保证得到错误的结果......即使您有一个事务 - 其他客户端可能正在读取WITH(NOLOCK)或其他机制,并取回虚假价值.... –