IDENT_CURRENT 獲取主表當前自增的ID值

 項目中要用到一個功能:主表主鍵爲自增加,要求在插入主表數據前先得到主表要插入數據的主鍵ID值,用在插入子表時獲取主鍵ID。在網上搜了一下,發現SELECT IDENT_CURRENT(TableName)這個語句能夠實現。但是後來發現這個語句存在一個致命問題。sql

 

問題以下:(表中數據都爲空)數據庫

(狀況一)ide

當新建表數據爲空時, IDENT_CURRENT(TableName)返回值爲1.這時主表數據插入成功後,主表自增加列會自動賦值 1 spa

(狀況二)orm

   當新增一條數據並刪除後, IDENT_CURRENT(TableName)返回值仍是1,但是如今主表插入成功後,主表自增加列會自動賦值2,而插入子表的主表ID仍是1,這樣就會致使主表和子表的關聯字段不一致。it

 

  在網上找了幾個解決方案:table

1.     DBCC CHECKIDENT (tableName, RESEED, 1)class

重置表的標示種子爲1,但是在‘狀況二’下,數據庫仍是會以 2 賦給主表ID字段,而不是1方法

2.     DBCC CHECKIDENT (tableName)im

狀況一下輸出爲:

檢查標識信息當前標識值'null',當前列值'null'

狀況二下輸出爲:

檢查標識信息當前標識值'1',當前列值'1'

雖然根據輸出信息不一樣,當數據表空時能夠判斷是‘狀況一’仍是‘狀況二’,但是在C#中不管用ExecuteNonQuery, ExecuteScalar仍是datatable返回的都是空數據

 

    鬱悶了一個下午始終沒有找到答案,最後發現用下面的方法能夠實如今子表中插入主表最新記錄的ID值。 直接將CONVERT(INT,IDENT_CURRENT('SalesInfo'))做爲主鍵ID的值添加到子表sql語句便可

INSERT INTO PayInfo(SID) VALUES(CONVERT(INT,IDENT_CURRENT('STable')))

相關文章
相關標籤/搜索