如何在sql中获取下一个自动增量值
我正在c#中创建一个winform应用程序并使用sql数据库。
我有一个表employee_master
,其中包含Id, name, address
和phone no
。 Id
是自动增量,所有其他数据类型都是varchar
。
我使用此代码获取下一个自动增量值:
string s = "select max(id) as Id from Employee_Master"; SqlCommand cmd = new SqlCommand(s, obj.con); SqlDataReader dr = cmd.ExecuteReader(); dr.Read(); int i = Convert.ToInt16(dr["Id"].ToString()); txtId.Text = (i + 1).ToString();
我在textBox上显示。
但是当删除表中的最后一行时,我仍然得到最近在文本框中删除的值
我该如何获得下一个自动增量值?
要从SQLServer获取下一个自动增量值:
这将获取当前的自动增量值。
SELECT IDENT_CURRENT('table_name');
下一个自动递增值。
SELECT IDENT_CURRENT('table_name')+1;
——>即使您添加一行然后删除它也会有效,因为IDENT_CURRENT返回在任何会话和任何范围内为特定表生成的最后一个标识值。
试试这个:
SELECT IDENT_CURRENT('tbl_name') + IDENT_INCR('tbl_name');
当您从表中删除一行时,下一个数字将保持不变,因为它不会以任何方式减少。
因此,如果你有100行,你删除了第100行。你将有99行,但下一个数字仍然是101。
max(id)将获得列表pf employee_master中的最大数量
例如id = 10,20,100所以max会给你100
但是当你删除记录时,它必须不是100
所以你仍然得到100回
我这样说的一个重要原因可能是问题,因为您没有在查询中使用id by order
如果您使用的是Microsoft SQL Server。 使用此语句获取表的当前标识值。 然后添加您在设计表时指定的种子值,如果您想获得下一个id。
SELECT IDENT_CURRENT()
select isnull((max(AddressID)+1),1) from AddressDetails
对于MS SQL 2005及更高版本:
Select Cast(IsNULL(last_value,seed_value) As Int) + Cast(increment_value As Int) As NextID From sys.identity_columns WHERE NAME =
只是想一想,如果您想要的是您在已打开的连接上插入的最后一个自动编号,请尝试使用:
SELECT @@IDENTITY FROM...
从那个连接。 这是跟踪特定连接刚刚发生的事情并避免与其他连接竞争的最佳方式。 获得最大身份通常是不可行的。