SQLServer SELECT @@IDENTITY 遇到的坑


經常在寫存儲過程的時候獲取當前插入后的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()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM