[SQL]取得Table IDENTITY 欄位值的方式

在SQL中有以下幾種取得Table IDENTITY 欄位值的方式

在SQL中有以下幾種取得Table IDENTITY 欄位值的方式

1.@@IDENTITY

這是傳回最後插入的識別值之系統函數。

 

2.SCOPE_IDENTITY

傳回插入相同範圍之識別欄位中的最後一個識別值。 範圍是一個模組:預存程序、觸發程序、函數或批次。 因此,如果兩個陳述式在相同預存程序、函數或批次中,它們就在相同範圍中。

 

3.IDENT_CURRENT('Table Name')

傳回針對指定之資料表或檢視表所產生的最後一個識別值。 最後一個識別值可能是針對任何工作階段和任何範圍所產生的。

 

以下用測試程式來Run一下比較清楚!


use tempdb
GO

--建立測試的資料表
IF OBJECT_ID('TableA') IS NOT NULL 
	DROP TABLE TableA;
go

CREATE TABLE TableA(
	id INT IDENTITY(10, 5), --從10開始,每次增加5
	c1 VARCHAR(30)
);
go

IF OBJECT_ID('TableLog') IS NOT NULL 
	DROP TABLE TableLog;
go


CREATE TABLE TableLog(
	id INT IDENTITY(1, 1), --從1開始,每次增加1
	who VARCHAR(30), 
	act VARCHAR(30)
);

--建立Trigger
 

--針對資料表,建立更新及刪除的trigger名稱為 record_delete
IF OBJECT_ID ('TR_TableA','TR') IS NOT NULL
    DROP TRIGGER TR_TableA
GO
CREATE TRIGGER TR_TableA
ON TableA
AFTER INSERT, UPDATE, DELETE 
AS
BEGIN
	--被刪除或是被更新的資料
	INSERT INTO TableLog(who, act)  
	SELECT SUSER_SNAME() , 'deleted' 
	FROM deleted;

	--更新後的資料
	INSERT INTO TableLog(who, act)  
	SELECT SUSER_SNAME() , 'inserted' 
	FROM inserted;
END

GO

--開始新增資料
INSERT INTO TableA(c1) VALUES('c1');

--取出Table的Identity欄位值
SELECT @@IDENTITY AS '@@IDENTITY', SCOPE_IDENTITY() AS 'SCOPE_IDENTITY';

SELECT IDENT_CURRENT('TableA') AS 'TableA_IDENT_CURRENT', IDENT_CURRENT('TableLog') AS 'TableLog_IDENT_CURRENT';

image

 

所以在使用上需要注意到取值的範圍哦!

Hi, 

亂馬客Blog已移到了 「亂馬客​ : Re:從零開始的軟體開發生活

請大家繼續支持 ^_^