1. IDENTITY 列不能由用戶直接更新,它是由系統(tǒng)自動(dòng)維護(hù)的。
2.該列數(shù)據(jù)類型必須為數(shù)值型:int, smallint, tinyint, decimal or numeric with scale 0。
3.該列不能為 null。
4.不能在該列上設(shè)置缺省值。
5.遞增量只能為整形(比如:1,2,-3)。不能為小數(shù),也不能為0。
6.基值(種子值 seed)可以由用戶設(shè)置,缺省值為1。
理解 @@IDENTITY
@@IDENTITY 返回最后一個(gè)插入 IDENTITY 的值,這些操作包括:INSERT, SELECT INTO,或者 bulk copy。如果在給沒有 IDENTITY 列的其他表插入記錄,系統(tǒng)將其置為 null。如果有多行記錄插入到 IDENTITY 表中,@@IDENTITY 表示最后一個(gè)產(chǎn)生的值。如果觸發(fā)了某個(gè)觸發(fā)器,并且這個(gè)觸發(fā)器執(zhí)行向另一個(gè)帶有 IDENTITY 列的表的插入操作,@@IDENTITY 將返回這個(gè)由觸發(fā)器產(chǎn)生的值。如果這個(gè)觸發(fā)器插入的表中不包含 IDENTITY 列,那么 @@IDENTITY 將為 null。如果插入操作失敗,@@IDENTITY 值依然會(huì)增加,所以 IDENTITY 不保證數(shù)據(jù)的連續(xù)性。
@@IDENTITY 是當(dāng)前連接的全局變量,只對(duì)當(dāng)前連接有效。也就是說(shuō),如果斷開連接再重新連接后,@@IDENTITY 為 null。以 ADO 來(lái)說(shuō),@@IDENTITY 在 Connection 對(duì)象打開和關(guān)閉期間是有意義的,即在 Connection 對(duì)象的存在范圍內(nèi)有效。在 MTS 組件中,從打開連接到顯式的關(guān)閉連接(Connection.Close)或者到調(diào)用了 SetAbort,SetComplete之前,在這期間,@@IDENTITY 有意義。
使用 Truncate table 語(yǔ)句會(huì)使 IDENTITY 列重新開始計(jì)算。
得到 @@IDENTITY 的值
有三種方法(以下代碼均使用 VBScript)
方法一:
Dim Conn, strSQL, Rs
Set Conn = CreateObject("ADODB.Connection")
' Open a connection to the database
Conn.Open("DSN=myDSN;UID=myUID;PWD=myPWD;")
' Insert a new record into the table
strSQL = "INSERT INTO mtTable (columnName) VALUES ('something')"
' Execute the SQL statement
Conn.Execute(strSQL)
' Get the @@IDENTITY.
strSQL = "SELECT @@IDENTITY AS NewID"
Set Rs = Conn.Execute(lsSQL)
NewID = Rs.Fields("NewID").value
' Close the connection
Conn.Close()
Set Conn = Nothing
方法二(僅限于 ADO 2.0 以上):
Dim Conn, strSQL, Rs
Set Conn = CreateObject("ADODB.Connection")
' Open a connection to the database
Conn.Open("DSN=myDSN;UID=myUID;PWD=myPWD;")
' Insert a new record into the table
lsSQL = "INSERT INTO myTable (columnName) VALUES ('something');" &_
"SELECT @@IDENTITY AS NewID;"
' Execute the SQL statement
Set Rs = Conn.Execute(lsSQL)
' Get the second resultset into a RecordSet object
Set Rs = Rs.NextRecordSet()
' Get the inserted ID
NewID = Rs.Fields("NewID").value
' Close the connection
Conn.Close()
Set Conn = Nothing
方法三:
Dim Conn, strSQL, Rs
Set Conn = CreateObject("ADODB.Connection")
' Open a connection to the database
Conn.Open("DSN=myDSN;UID=myUID;PWD=myPWD;")
' Insert a new record into the table
strSQL = "SET NOCOUNT ON;" &_
"INSERT INTO myTable (columnName) VALUES ('something');" &_
"SELECT @@IDENTITY AS NewID;"
' Execute the SQL statement
Set Rs = Conn.Execute(lsSQL)
' Get the inserted ID
NewID = Rs.Fields("NewID").value
' Close the connection
Conn.Close()
Set Conn = Nothing