在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
- 或
select ID from tableTest where testUserEmail =@testValue and testUserName = @testName
- 或
select SCOPE_IDENTITY() as ID
end
请告诉我哪种方法更适合执行所描述的任务。
答案 0 :(得分:5)
无论如何 - 如果您的SCOPE_IDENTITY()
列只有ID
- ,那么请使用INT IDENTITY
,以便为您提供正确的结果!
如果您有多个客户端几乎同时插入行,那么使用MAX(ID)
的第一种方法将会非常失败 - 您将得到错误的结果。不要使用它!
如果另一个具有相同电子邮件和名称值的条目已存在,则第三种方法可能会失败。
另外,作为旁注:您应该永远使用sp_
作为前缀!这是一个Microsoft保留的前缀,在性能方面有缺点 - 使用其他东西。
答案 1 :(得分:2)
如果您将Identity列作为主键,则应使用SCOPE_IDENTITY()
您还可以使用OUTPUT Clause返回ID。
insert into tableTest(testUserEmail,testUserName)
output inserted.ID
values (@testValue, @testName)