1. 程式人生 > >select @@Identity 返回自動遞增欄位的值。

select @@Identity 返回自動遞增欄位的值。

1. IDENTITY 列不能由使用者直接更新,它是由系統自動維護的。

2.該列資料型別必須為數值型:int, smallint, tinyint, decimal or numeric with scale 0。

3.該列不能為 null。

4.不能在該列上設定預設值。

5.遞增量只能為整形(比如:1,2,-3)。不能為小數,也不能為0。

6.基值(種子值 seed)可以由使用者設定,預設值為1。

理解 @@IDENTITY

@@IDENTITY 返回最後一個插入 IDENTITY 的值,這些操作包括:INSERT, SELECT INTO,或者 bulk copy。如果在給沒有 IDENTITY 列的其他表插入記錄,系統將其置為 null。如果有多行記錄插入到 IDENTITY 表中,@@IDENTITY 表示最後一個產生的值。如果觸發了某個觸發器,並且這個觸發器執行向另一個帶有 IDENTITY 列的表的插入操作,@@IDENTITY 將返回這個由觸發器產生的值。如果這個觸發器插入的表中不包含 IDENTITY 列,那麼 @@IDENTITY 將為 null。如果插入操作失敗,@@IDENTITY 值依然會增加,所以 IDENTITY 不保證資料的連續性。

@@IDENTITY 是當前連線的全域性變數,只對當前連線有效。也就是說,如果斷開連線再重新連線後,@@IDENTITY 為 null。以 ADO 來說,@@IDENTITY 在 Connection 物件開啟和關閉期間是有意義的,即在 Connection 物件的存在範圍內有效。在 MTS 元件中,從開啟連線到顯式的關閉連線(Connection.Close)或者到呼叫了 SetAbort,SetComplete之前,在這期間,@@IDENTITY 有意義。

使用 Truncate table 語句會使 IDENTITY 列重新開始計算。

得到 @@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  

相關推薦

select @@Identity 返回自動遞增

1. IDENTITY 列不能由使用者直接更新,它是由系統自動維護的。 2.該列資料型別必須為數值型:int, smallint, tinyint, decimal or numeric with scale 0。 3.該列不能為 null。 4.不能在該列上設定預設值。 5

elasticsearch 在查詢的時候如何返回指定的

指定返回欄位,查詢方式, SearchResponse response = client.prepareSearch("sb").setTypes("sb")

SQLServers指定自動增長

開啟 自動隱式增長 SET IDENTITY_INSERT products OFF SET IDENTITY_INSERT products2 ON 必須加列名不然會報錯 INSERT INTO products2 (id, product) VALUES(

mysql在select語句的自動增長

自己閒著弄的,寫下來記錄一下。 網上很多都是2個語句的。我自己想一個語句。測試後,在我的機器上執行成功。 首先是網上查到的。 select @a:=1 ; select @a:[email protected]+1 as rowid, invoiceid f

SpringBoot框架下的SQL查詢空結果時返回Map型別為空

今天在執行業務的時候發現在一次查詢時, 查詢出當一個欄位值為null時,封裝成Map型別返回的物件則不存在該值如:<select id="getUserDetail" parameterType="java.util.Map" resultType="java.util

Oracle中判斷select為NULL的函式

COALESCE()這個函式是ASNI標準的SQL函式,MS SQL 和 oracle都可以用 NVL()是oracel獨有的函式,功能與COALESCE()相同 而在 MS SQL中的ISNULL()函式功能與COALESCE()相同 1  SELECT NVL(FIE

MySql 表的約束、自動增加

@author StormWangxhu @data 2017/11/21 (一)資料表的約束 1、約束目的: 為了防止資料庫中插入錯誤的資料。 在設計資料庫時,為了確保資料庫表中資料的質量,需要考慮資料的完整性(資料的完整性是指資料的正確性和一致

SQL SERVER 如何設定自動增長的初始

create table tb(id int, ident int identity(10000, 1)) insert into tb select 1000 union all select 1001 union all select 1002 union all s

Yii 自動設定模型的

[php] <?php class MasterAdmin extends CActiveRecord { public function beforeSave() { if($this->isNewRecord) // 只有在新建記錄時執行

insert和 select 結合實現“插入某在資料庫中的最大+1”

本文是mysql 資料庫 問題一 將表一的資料匯入表二: 將表一的資料匯入表二: 將表二中的資料 插入到 表一,表一的列對應表二 select 出來的列 INSERT INTO 表一 (column1, column2, column3, c

SpringBoot介面返回去掉空

返回的介面中存在值為null或者空的欄位過濾掉 @Configuration public class JacksonConfig { @Bean @Primary @ConditionalOnMissingBean(ObjectMapper.class) public

js把頁面明細行資料多個組成陣列,並獲取某個最大和其次大的資料賦到文字框;

要求:前臺新增頁面的明細行中,有列下拉框選擇分類和一列付款金額的輸入框,明細行上面有兩個輸入框,要求在明細行選擇的分類和付款金額中篩選付款金額之和第一高的的分類和金額、第二高的分類和金額自動複製到上面的兩個輸入框中; 思路:迴圈明細表,把所有的明細表的分類和付款金額放到json陣列中,然後迴圈j

區塊鏈中區塊的解釋

得到最新區塊的資訊 通過呼叫web3的介面得到最新區塊的資訊 引數解釋 引數 解釋 Difficulty 此區塊的難度級別 ExtraData

sql 兩張表對比多出的

比如表dbo.DangAn表中有的而dbo.YongHu表沒有的值都顯示出來 SELECT * FROM dbo.DangAn a WHERE a.xCode NOT IN( SELECT b.yCode FROM dbo.YongHu b)   表dbo.YongHu有的欄位

java中使用反射獲取pojo(實體)類的所有

 說起反射,不得不說它實在是太強大了,通過反射就可以輕輕鬆鬆拿到各種東東,如果你想在專案中解除對某個類的依賴,可以考慮用反射。        今天跟大家分享的是通過java中的反射,獲取pojo類的所有欄位值。 &nb

資料庫拼接字串更改

使用CONCAT(str1,str2,...) 函式 欄位orderid的值為1234,則: CONCAT(orderid,“0000”)的值為: 12340000 CONCAT(orderid,orderid)的值為:12341234 更改欄位值語句如下: UPDATE clear_me

proto3為空時被忽略問題

問題 message GetRes { bool is_abc = 1; } 當 is_abc 值為false時,直接輸出response無法顯示 is_abc 這個欄位。在編譯出來的pb.go(我用的go語言)檔案中可以看到這個欄位後面帶有 omitempty 屬性,也就是

使用左連線查詢指定最高的記錄

1、查詢test表中wealth最大的記錄的name和wealth select s1.name,s1.wealth from test s1  left join test s2 on s1.wealth<s2.wealth where s2.name is null; 2

MySQL將一個表的某個更新到另外一張表

今天,遇到一個需求是要將MySQL的一個表中的欄位更新到另一個表中,開始,我嘗試用以下的SQL解決:   UPDATE t_order_temp SET price=t_order.amount  FROM t_order WHERE t_order_temp

mysql資料庫根據主鍵關聯更新指定

需求: 現有兩個表分別為 person_info2  和 person_info ,person_info2 表資料不變,當person_info2表中的主鍵和person_info2 表的主鍵相同時,則更新person_info2 表中其他欄位更新為per