如何在sql中获取下一个自动增量值

sid*_*rth 12 c# sql sql-server sql-server-2000 winforms

我正在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();
Run Code Online (Sandbox Code Playgroud)

我在textBox上显示.

但是当删除表中的最后一行时,我仍然得到最近在文本框中删除的值

我该如何获得下一个自动增量值?

pat*_*anb 22

要从SQLServer获取下一个自动增量值:

这将获取当前的自动增量值.

SELECT IDENT_CURRENT('table_name');
Run Code Online (Sandbox Code Playgroud)

下一个自动递增值.

SELECT IDENT_CURRENT('table_name')+1; 
Run Code Online (Sandbox Code Playgroud)

------>即使你添加一行然后删除它也会有效,因为IDENT_CURRENT返回在任何会话和任何范围内为特定表生成的最后一个标识值.

  • 这显然不是真的 - "IDENTITY"可能会增加不同于1的东西!事实是:你**不能**获得SQL Server中'IDENTITY`列的下一个值 - ****无法**这样做.当INSERT发生**时,值才会被设置** - 而不是之前. (7认同)
  • @ patel.milanb:你的'IDENTITY`的增量值可能是5 - 所以你的下一个值是**1515**(和**不是**1511!) - 还有:如果下一个插入回滚,一个值(如1515)可能会"丢失" - **真正的**下一个值最终为1520.只需在"IDENT_CURRENT"中添加+1即可获得**GUESS**..... (6认同)
  • 任何小问题,服务器跳转到下一个数字..如果有几个问题,那么它会跳过_several_个数字; 因此不可预测所以只做`)+ 1`是错误的 (3认同)
  • 你也会遇到并发问题.如果两个用户同时尝试添加员工,您将获得相同的"下一个ID",但第二个保存将获得不同的ID. (2认同)

Meh*_*ili 6

试试这个:

SELECT IDENT_CURRENT('tbl_name') + IDENT_INCR('tbl_name');
Run Code Online (Sandbox Code Playgroud)