web-dev-qa-db-fra.com

comment obtenir la prochaine valeur d'autoincrement en sql

Je crée une application Winform en C # et utilise une base de données SQL.

J'ai une table, employee_master, qui a des colonnes comme Id, name, address et phone no. Id est une incrémentation automatique et tous les autres types de données sont varchar.

J'utilise ce code pour obtenir la prochaine valeur d'incrémentation automatique:

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

Je montre sur un textBox.

Mais quand la dernière ligne de la table est supprimée, j'obtiens toujours cette valeur qui a été récemment supprimée dans la zone de texte

Comment dois-je obtenir la prochaine valeur d'auto-incrémentation?

10
siddharth

Pour obtenir la prochaine valeur d'auto-incrémentation à partir de SQLServer:

Cela va chercher la valeur actuelle d'auto-incrémentation.

SELECT IDENT_CURRENT('table_name');

Prochaine valeur d'incrémentation automatique.

SELECT IDENT_CURRENT('table_name')+1; 

------> Cela fonctionnera même si vous ajoutez une ligne, puis la supprimez, car IDENT_CURRENT renvoie la dernière valeur d'identité générée pour une table spécifique dans une session et une étendue quelconque.

21
patel.milanb

essaye ça:

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

Lorsque vous supprimez une ligne de la table, le nombre suivant restera le même, car il ne diminuera en aucune façon.

Donc, si vous avez 100 lignes et que vous supprimez la ligne 100. Vous auriez 99 lignes, mais le nombre suivant sera toujours 101.

1
Gaz Winter

Juste une pensée, si ce que vous vouliez était le dernier numéro automatique que vous avez inséré sur une connexion déjà ouverte, essayez d'utiliser:

SELECT @@IDENTITY FROM...

de cette connexion. C'est le meilleur moyen de suivre ce qui vient de se passer sur une connexion donnée et d'éviter les situations de concurrence avec d'autres connexions. Obtenir l'identité maximale n'est généralement pas réalisable.

0
Beastian

le max (id) vous donnera le nombre maximum dans la liste pf employee_master

par exemple. id = 10, 20, 100 donc max vous obtiendrez 100

Mais lorsque vous supprimez l'enregistrement, ce ne devait pas être 100 

Donc, vous obtenez toujours 100 en arrière

Une raison importante pour moi de dire que cela pourrait être le problème parce que vous n'utilisez pas order by id dans votre requête

0
HatSoft

Si vous utilisez Microsoft SQL Server. Utilisez cette instruction pour obtenir la valeur d'identité actuelle de la table. Ajoutez ensuite la valeur de base que vous avez spécifiée au moment de la conception de la table si vous souhaitez obtenir le prochain identifiant.

SELECT IDENT_CURRENT(<TableName>)
0
Rumit Parakhiya

Pour MS SQL 2005 et supérieur:

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