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')))

相关文章
相关标签/搜索