Asp-sql server : récupérer l'id d'un élément ajouté dans une table sous sql server

Soyez le premier à donner votre avis sur cette source.

Snippet vu 24 541 fois - Téléchargée 38 fois

Contenu du snippet

Il est très utile de pouvoir récupérer lors d'un enrichissement de table de données sous SQL Server (en ASP) de pouvoir récupérer le N° ID créé automatiquement par le SGBD.

Ainsi, après de nombreuses recherches dans ce sens, je suis tombé sur cet article :
- http://www.devparadise.com/technoweb/code/sql/A436.asp

Il indique en détail comment faire, je copie tout de même l'article ici au cas où, mais sachez que cette astuce n'est pas de moi mais de Magali Giard

Source / Exemple :


' ----------------------------------------
....

'Pour récupérer l'identifiant d'un nouvel enregistrement et être sûr que ce soit bien l' enregistrement qui nous interesse, rien de mieux qu'une procédure stockée. 

'Nous vous proposons ici une méthode simple qui ne nécessite pas de de==procédure stockée et qui évite de faire un select avec l'ensemble des données que l'on vient d'insérer dans la base de données.

'Cette méthode utilise @@IDENTITY et consiste à exécuter la requête INSERT suivie d'une requête SELECT @@IDENTITY dans le même recordset.

'Voici la requête : 
"INSERT INTO Table ( Champ(s) ) VALUES ( valeur(s) ); SELECT @@IDENTITY as ID"

'Vous trouverez ci-dessous un exemple en ASP utilisant la récupération de l'ID : 

'Dans cet exemple, on insere la valeur "test" dans le champ Test de la Table Test ayant comme clé primaire le champ ID.

SQL="INSERT INTO Test (Test) VALUES ('test'); SELECT @@IDENTITY as ID"
...
Set rs = MyCon.Execute(SQL,,1)   '=> les requêtes seront exécutée telle quelles sont données l'une après l'autre 
Set rs= rs.NextRecordset      '=> la données retournée par la deuxième requête (le deuxième recordset) sera l'identifiant 
...            '=> de l'enregistrement inséré par la première requête.
ID=rs("ID")

'-------------------------------------
la commande Execute a trois arguments parfois optionnel : 
Execute(SQL, Paramètres, Options ) 
'=> SQL : la variable contenant les requêtes à exécuter
'=> Paramètres : (optionnel) tableau contenant les paramètres de(s) requête(s).
'=> Options : défini comment doit être interprété la commande execute.

'Options peut prendre entre autres les valeurs : 
'-1    <=>    adCmdUnspecified    => le type n'est pas spécifié
'1    <=>    adCmdText   => type texte : SQL sera évalué comme tel
'2   <=>   adCmdTable   => SQL sera évalué comme un nom de table et la valeur de chaque champ sera retournée.
'4   <=>   adCmdStoredProc   => SQL sera évalué comme le nom d'une procédure stockée
'8   <=>   adCmdUnknown   => valeur par défaut : type inconnu
'256   <=>   adCmdFile   => SQL sera évalué comme étant un nom de fichier
'512   <=>   adCmdTableDirect   => SQL sera évalué comme un nom de table

....
'-------------------------------------

Conclusion :


Merci encore à la créatrice de cette astuce : Magali Giard

Bon Coding.

Romelard Fabrice (Alias F___)

A voir également

Ajouter un commentaire Commentaires
cs_Domilo Messages postés 32 Date d'inscription jeudi 31 janvier 2002 Statut Membre Dernière intervention 22 février 2005
8 sept. 2003 à 22:05
Attention @@Identity fonctionne parfaitement pour tous les cas... sauf si un "triggeur" est caché derrière la table.
Utilisez plustot SCOPE_IDENTITY() qui s'utilise aussi façilement, et qui ne vous posera aucun désaventage.

A+
Dom.
cs_arcollet Messages postés 31 Date d'inscription jeudi 12 juin 2003 Statut Membre Dernière intervention 13 avril 2008
30 juin 2003 à 13:23
Message pour LleWellA et fabrice69 :

Il est franchement déconcertant de vous lire.
Est il une fois de plus nécessaire de rappeler :

- que les développeurs inscrivant une astuce dans un forum ne sont pas obligé de le faire !
- que cette démarche (même si elle n'est pas toujours compréhensible au 1er abords) n'est pas pour eux mais toujours pour les autres ! C'est çà l'entraide.
- et qu'ils n'ont certainement pas à subir des reproches sur leur contenu, il est vrai pas toujours pédagogiques pour les néophytes.
- et que la plus part sont près à fournir des explications complémentaires si on leur demande gentillement, même sur des notion de base (ID par exemple).

J'espère donc que fabrice69 continuera à alimenter ce forum et que LileWellA se taise... tout du moins une fois avoir épluché des sites comme http://www.commentcamarche.net

Denis
LleWellA Messages postés 37 Date d'inscription mardi 18 juin 2002 Statut Membre Dernière intervention 28 juin 2007
11 juin 2003 à 10:58
Attention, il ne faut pas conforndre un hélicoptère et un avion ...
Ce n'est pas parce que je sais programmer en JScript, qu'obligatoirement je sais programmer en T-SQL ..
Le language d'une base de données n'est pas chose aisé ..
Pour un débutant comme moi en T-SQL, le plus d'informations, de commentaires, de structures est toujours appréciable.

Et pour finir sur une note agréable ( A440 )- les musiciens comprendront -
Merci des efforts que tu fournis
cs_fabrice69 Messages postés 1765 Date d'inscription jeudi 12 octobre 2000 Statut Membre Dernière intervention 11 décembre 2013 5
10 juin 2003 à 12:47
la structure de la table ne t'aide en rien dans cet article, car identity ne fait que chercher la clé unique de la table en question.
Cela ne fonctionne que sur SQL Serveur (à ma connaissance).

Je vais en revanche modifier le niveau, je pensais qu'il était accessible aux débutant mais devant ta réaction agressive, cela ne doit pas être le cas.

Pour info je préfère recopier la partie intéressante de la source et non mttre un lien direct, car en cas d'innaccessibilité de ce site à l'avenir, la partie utile est toujours visible.

"Merci de commenter correctement le code !" < évite ce genre de remarque car, il n'y a quasiment que du commentaire dans cet article, 4 lignes de code.

Enfin, une dernière remarque, un codeur qui donne une source pour le codage décodage base 64 n'est pas un débutant pour moi mais bon.

F___
LleWellA Messages postés 37 Date d'inscription mardi 18 juin 2002 Statut Membre Dernière intervention 28 juin 2007
10 juin 2003 à 12:34
Bien justement si l'article n'est pas de toi, laisse le ou il est et crees juste un lien!
De plus le niveau que tu affiches niveau 1. J'en conclue qu'il s'adresse au débutant ( ce que je suis ).
Donc soit tu mets le niveau deux ou trois, puisque le lecteur doit avoir des notions plus que de base
ou alors tu expliques ce qu'a voulu faire passer le créateur.

Parceque des ID j'en connais plein aussi ...
On peut en mettre 2, 3 voire plus si besoins s'en fait sentir ...

Avec la structure de la table cela aurait faciliter la compréhension du code !


Merci de commenter correctement le code !

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.