Как получить следующее значение автоинкремента в sql

Я создаю приложение 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();

Я показываю на текстовом поле.

Но когда последняя строка из таблицы удаляется, все же я получаю это значение, которое недавно было удалено в текстовом поле

Как мне получить следующее значение автоинкремента?

Ответ 1

Чтобы получить следующее значение автоматического прироста от SQLServer:

Это будет отображать текущее значение автоинкремента.

SELECT IDENT_CURRENT('table_name');

Следующее значение автоинкремента.

SELECT IDENT_CURRENT('table_name')+1; 

------ > Это будет работать, даже если вы добавите строку, а затем удалите ее, потому что IDENT_CURRENT возвращает последнее значение идентификации, сгенерированное для конкретной таблицы в любом сеансе и в любой области.

Ответ 2

попробуйте следующее:

SELECT IDENT_CURRENT('tbl_name') + IDENT_INCR('tbl_name');

Ответ 3

Когда вы удаляете строку из таблицы, следующее число останется таким же, как оно никак не уменьшится.

Итак, если у вас есть 100 строк, и вы удалили строку 100. У вас было бы 99 строк, а следующее число все равно будет 101.

Ответ 4

max (id) получит максимальное число в списке pf employee_master

например. id = 10, 20, 100, поэтому вы получите 100

Но когда вы удаляете запись, она должна быть не 100

Итак, вы все еще получаете 100 назад

Одна из важных причин для меня сказать, что это может быть проблемой, потому что вы не используете порядок по id в своем запросе

Ответ 5

Если вы используете Microsoft SQL Server. Используйте это выражение для получения текущего значения идентификатора таблицы. Затем добавьте начальное значение, которое вы указали во время проектирования таблицы, если хотите получить следующий идентификатор.

SELECT IDENT_CURRENT(<TableName>)

Ответ 6

select isnull((max(AddressID)+1),1) from AddressDetails

Ответ 7

Для 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 = <Table_Name>

Ответ 8

Просто мысль, если бы вы хотели, это последний автоматический номер, который вы вставили в уже открытое соединение, попробуйте использовать:

SELECT @@IDENTITY FROM...

из этого соединения. Это лучший способ отслеживать, что только что произошло в данном соединении, и избегать условий гонки с другими соединениями. Получение максимальной идентичности обычно не представляется возможным.

Ответ 9

SqlConnection con = new SqlConnection ("Источник данных =.\SQLEXPRESS; Начальный каталог = имя базы данных; Идентификатор пользователя = sa; Пароль = 123"); con.Open(); SqlCommand cmd = new SqlCommand ("ВЫБЕРИТЕ ТОП (1) UID ИЗ InvoiceDetails ORDER BY 1 DESC", con);

        SqlDataReader reader = cmd.ExecuteReader();

        //won't need a while, since it will only retrieve one row
        while (reader.Read())
        {

            string data = reader["UID"].ToString();
            //txtuniqueno.Text = data;
            //here is your data
            //cal();
            //txtuniqueno.Text = data.ToString();
            int i = Int32.Parse(data);
            i++;
            txtuid.Text = i.ToString();