2013年1月14日 星期一

MySQL、MS SQL 與 Oracle 取得自動編號欄位新增後的值

資料表格式
A int Unchecked (INDEX)
B nchar(10) Checked

MSSQL
INSERT INTO [TableName] (欄位1,欄位2) values(值1,值2) '新增資料
SELECT scope_identity() '傳回剛新增的自動編號資
INSERT INTO BB (B) VALUES ('AA')
SELECT @@identity
INSERT INTO BB (B) VALUES ('AA')
SELECT Scope_identity()
兩者之間的差異在於 SCOPE_IDENTITY 和 @@IDENTITY 將傳回現行工作階段中任何資料表所產生的最後一個識別值,不過,SCOPE_IDENTITY 只會傳回現行範圍內的值,@@IDENTITY 並未限制特定範圍。
-- 建立資料表
CREATE TABLE [member]
(
[uid] [int] IDENTITY(1,1) NOT NULL,
[name] [nvarchar](50) NULL
) ON [PRIMARY]

-- 新增一筆資料
INSERT INTO [member] VALUES ( 'Ian' )

-- 取得自動編號的值
SELECT SCOPE_IDENTITY()


MySQL
-- 建立資料表
CREATE TABLE member
(
uid INT NOT NULL AUTO_INCREMENT,
name VARCHAR( 50 ) NOT NULL,
PRIMARY KEY ( uid )
)

-- 新增一筆資料  
INSERT INTO member VALUES ( NULL , 'Ian' )

-- 取得自動編號的值
SELECT LAST_INSERT_ID()


Oracle
-- 建立資料表
CREATE TABLE "member"   
(  
"uid" NUMBER,   
"name" NVARCHAR2(50)  
);  
  
-- 建立 Sequence  
CREATE SEQUENCE "seq_member"  
MINVALUE 1  
MAXVALUE 999999999  
INCREMENT BY 1  
START WITH 1 

-- 新增一筆資料並利用 Sequence 自動產生編號  
INSERT INTO member VALUES(seq_member.NEXTVAL,'Ian') 

-- 取得自動編號的值  
SELECT seq_member.CURRVAL FROM DUAL