Mim

Select * from Seb where Sujets in (SQL Server 2008, ADO.NET, Visual Studio 2008)

Max(), Dbcc CheckIdent(), Ident_Current()

Rien à voir avec la choucroute, mais je rentre d'une semaine de vacances, et ben, ça fait du bien !

Evidemment, le retour aux sources est assez douloureux, surtout lorsqu'on doit dépiler les quantités de mails de retard (en virant les 90% de spam et autre bétises) et l'ensemble des flux RSS qu'on a l'habitude de parcourir !

Et justement, ce matin je suis tombé sur ce post intéressant où Pinal Dave nous explique comment récupérer la valeur courant d'un incrément automatique.

Bon pour faire simple; et comme il dit, y'a deux solutions :

1) la pas élégante (mais qui marche) :

use AdventureWorks
Select max(DatabaseLogID) From dbo.DatabaseLog as MaxErrorLog

 

2) la façon élégante et qui marche (aussi) :

useAdventureWorks
Dbcc CheckIdent('dbo.DatabaseLog');

Mais ... je vois un problème à la deuxième solution : Impossible de récupérer la valeur dans une application .Net ! (Là où c'est possible avec la première méthode)

heureusement, il existe une Troisième méthode qui va nous permettre de récupérer non seulement l'incrément en cours, mais aussi d'autres valeurs intéressantes comme le Seed par exemple:

Nous avons à notre disposition pas moins de 3 fonctions utiles :

  1. IDENT_CURRENT() : Récupère la dernière valeur générée d'une colonne identité.

  2. IDENT_SEED() : Récupère la valeur de départ d'une colonne identité.

  3. IDENT_INCR() : Récupère l'incrément d'une colonne identité

 

Ce qui donne, par code un truc du genre :

Declare @tableName varchar(20) = 'dbo.DatabaseLog'

SELECT        @tableName as [Table],
            IDENT_SEED(@tableName) AS Seed,
            IDENT_INCR(@tableName) AS Increment,
            IDENT_CURRENT(@tableName) AS Current_Identity
 
Ident_current 
 

Et là biensûr pas de problème particulier pour récupérer ces valeurs depuis du code .Net !

Ah là là, les vacances sont finies... Big GrinParty