首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 取得剛插入資料的自增 ID:@@IDENTITY、SCOPE_IDENTITY、IDENT_CURRENT 差異比較

     編輯:關於SqlServer

最簡單做法

INSERT INTO tbldemo VALUES ('測試');
SELECT @@IDENTITY;

三大函數比較

函數範圍Session說明
@@IDENTITY所有作用域、所有資料表目前 Session回傳目前 Session 最後產生的身分識別值,包含觸發器產生的值
SCOPE_IDENTITY()目前作用域、所有資料表目前 Session回傳目前作用域最後產生的值,**不包含觸發器/巢狀作用域**
IDENT_CURRENT('table_name')指定資料表所有 Session回傳指定資料表最後產生的值,**跨 Session 可見**

觸發器情境範例

-- 資料表 T1、T2 皆有 IDENTITY 欄位
-- T1 上有 INSERT 觸發器,觸發時向 T2 插入一列

INSERT INTO T1 ...;  -- 觸發器隱性插入 T2

SELECT @@IDENTITY;      -- 回傳 T2 的 IDENTITY 值
SELECT SCOPE_IDENTITY(); -- 回傳 T1 的 IDENTITY 值

建議

  • 一般應用 優先使用 SCOPE_IDENTITY(),避免觸發器干擾
  • 需跨 Session 取得特定資料表最新值時用 IDENT_CURRENT
  • @@IDENTITY 相容性最好,但風險最高

完整建表與測試腳本

CREATE DATABASE dbdemo;
GO
USE dbdemo;
GO
CREATE TABLE tbldemo (
    id INT PRIMARY KEY IDENTITY(1,1),
    name VARCHAR(20)
);
GO

INSERT INTO tbldemo VALUES ('測試');
SELECT @@IDENTITY AS [@@IDENTITY], SCOPE_IDENTITY() AS [SCOPE_IDENTITY], IDENT_CURRENT('tbldemo') AS [IDENT_CURRENT];
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved