經常在寫存儲過程的時候獲取當前插入后的ID都會用 @@IDENTITY
但是今天在用 @@IDENTITY的時候涉及到當前數據的插入會有insert觸發器發生時,發現與實際插入的ID值對不上,網上查詢了一下,用SCOPE_IDENTITY()就好了
select SCOPE_IDENTITY()
返回上面操作的數據表最后row的IDENTITY 列的值;
返回插入到同一作用域中的 IDENTITY 列內的最后一個 IDENTITY 值。一個作用域就是一個模塊——存儲過程、觸發器、函數或批處理。因此,如果兩個語句處於同一個存儲過程、函數或批處理中,則它們位於相同的作用域中。
SELECT @@IDENTITY
返回上面操作最后一個數據表的最后row的IDENTITY 列的值;
創建表:
create table T_User(F_ID int identity(1,1) not null,F_Name varchar(20) not null)
插入數據:
insert into T_User(F_Name) values('我是誰') Select SCOPE_IDENTITY()
存儲過程:
CREATE PROCEDURE [dbo].[sp_User](@F_Name int) AS begin tran Insertinto_T_User Insert into dbo.T_User(F_Name) values(@F_Name) Select SCOPE_IDENTITY()