wake-up-neo.net

so erhalten Sie den nächsten Autoincrement-Wert in SQL

Ich erstelle eine Winform-Anwendung in c # .and mit SQL-Datenbank.

Ich habe eine Tabelle, employee_master, die Spalten wie Id, name, address und phone no enthält. Id ist automatisch inkrementiert und alle anderen Datentypen sind varchar.

Ich verwende diesen Code, um den nächsten automatischen Inkrementwert abzurufen:

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();

Ich zeige auf einer TextBox.

Wenn jedoch die letzte Zeile aus der Tabelle gelöscht wird, erhalte ich immer noch den Wert, der kürzlich in der Textbox gelöscht wurde

Wie soll ich den nächsten Autoincrement-Wert erhalten?

10
siddharth

So rufen Sie den nächsten Wert für die automatische Erhöhung von SQLServer ab:

Dadurch wird der aktuelle Auto-Increment-Wert abgerufen.

SELECT IDENT_CURRENT('table_name');

Nächster Auto-Inkrement-Wert.

SELECT IDENT_CURRENT('table_name')+1; 

------> Dies funktioniert auch, wenn Sie eine Zeile hinzufügen und dann löschen, da IDENT_CURRENT den letzten Identitätswert zurückgibt, der für eine bestimmte Tabelle in einer Sitzung und in einem Bereich generiert wurde.

21
patel.milanb

versuche dies:

SELECT IDENT_CURRENT('tbl_name') + IDENT_INCR('tbl_name');
6
Mehdi Esmaeili

Wenn Sie eine Zeile aus der Tabelle löschen, bleibt die nächste Zahl gleich, da sie in keiner Weise abnimmt.

Wenn Sie also 100 Zeilen haben und Zeile 100 gelöscht haben, hätten Sie 99 Zeilen, aber die nächste Zahl wird immer noch 101 sein.

1
Gaz Winter
 SqlConnection con = new SqlConnection("Data Source=.\SQLEXPRESS;Initial Catalog=databasename;User ID=sa;Password=123");
 con.Open();
 SqlCommand cmd = new SqlCommand("SELECT TOP(1) UID FROM 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();
  }
0
manish madankar

Nur ein Gedanke, wenn Sie die letzte Autonummer haben wollten, die Sie in eine bereits geöffnete Verbindung eingefügt haben, versuchen Sie es mit:

SELECT @@IDENTITY FROM...

von dieser Verbindung. Dies ist der beste Weg, um zu verfolgen, was gerade bei einer bestimmten Verbindung passiert ist, und um Rennbedingungen mit anderen Verbindungen zu vermeiden. Das Erreichen der maximalen Identität ist im Allgemeinen nicht möglich.

0
Beastian

die max (id) gibt Ihnen die maximale Anzahl in der Liste von employee_master

z.B. id = 10, 20, 100, so dass Sie maximal 100 erhalten

Wenn Sie den Datensatz löschen, darf es jedoch nicht 100 gewesen sein 

So bekommst du noch 100 zurück

Ein wichtiger Grund für mich zu sagen, dass dies das Problem sein könnte, weil Sie in Ihrer Suchanfrage keine Reihenfolge nach ID verwenden

0
HatSoft

Wenn Sie Microsoft SQL Server verwenden. Verwenden Sie diese Anweisung, um den aktuellen Identitätswert der Tabelle abzurufen. Fügen Sie dann Ihren Startwert hinzu, den Sie zum Zeitpunkt der Tabellenerstellung angegeben haben, wenn Sie die nächste ID erhalten möchten.

SELECT IDENT_CURRENT(<TableName>)
0
Rumit Parakhiya

Für MS SQL 2005 und höher:

Select Cast(IsNULL(last_value,seed_value) As Int) + Cast(increment_value As Int) As NextID
From sys.identity_columns
WHERE NAME = <Table_Name>
0
Martini
select isnull((max(AddressID)+1),1) from AddressDetails
0
Jidheesh Rajan