在SQL中有以下幾種取得Table IDENTITY 欄位值的方式
在SQL中有以下幾種取得Table IDENTITY 欄位值的方式
這是傳回最後插入的識別值之系統函數。
傳回插入相同範圍之識別欄位中的最後一個識別值。 範圍是一個模組:預存程序、觸發程序、函數或批次。 因此,如果兩個陳述式在相同預存程序、函數或批次中,它們就在相同範圍中。
傳回針對指定之資料表或檢視表所產生的最後一個識別值。 最後一個識別值可能是針對任何工作階段和任何範圍所產生的。
以下用測試程式來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';
所以在使用上需要注意到取值的範圍哦!
Hi,
亂馬客Blog已移到了 「亂馬客 : Re:從零開始的軟體開發生活」
請大家繼續支持 ^_^