|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre chevronné
![]() |
Bonjour,
J'utilise une procédure stockée pour insérer une ligne dans une table et renvoyer l'id de la nouvelle ligne. Après mon "INSERT INTO" je fais un Code :
SELECT @id = IDENT_CURRENT('fichiers') Code :
Papy |
||
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() ![]() |
avez-vous défini le paramètre @id comme paramètre de sorti (OUTPUT) ?
A+ |
|
00
|
|
|
#3 | ||
|
Membre chevronné
![]() |
En fait, ma procédure (simplifiée au niveau de la requête) est structurée comme suit:
Code :
J'ai peut-être fait tout de travers ? :-( |
||
|
|
00
|
|
|
#4 | ||||
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 669 ![]() |
Bonjour,
C'est plutôt pas mal, mais il y a quelques petites erreurs : n'utilisez pas IDENT_CURRENT() pour récupérer l'identifiant d'une ligne que vous venez d'insérer. Vous préférerez SCOPE_IDENTITY() qui retourne l'identifiant de la ligne insérée par la transaction juste avant son appel. Si vous utilisez IDENT_CURRENT() et que de nombreuses lignes sont insérées en même temps, il est possible que vous n'obteniez pas l'identifiant qui correspond à la ligne que vous venez d'insérer. En effet cette fonction n'a pas de limite de portée, tandis que SCOPE_IDENTITY() est limitée à la portée du module dans laquelle elle est appelée. D'autre part, veillez à toujours qualifier le nom des objets que vous manipulez par le nom du schéma auquel ils appartiennent : ici c'est dbo, le schéma par défaut. Enfin vous pouvez utiliser la clause OUTPUT pour vous retourner la valeur de l'identifiant, ce qui donne : Code :
Code :
Si ce n'est pas le cas, vous pouvez conserver le code que vous avez écrit, en le modifiant avec les recommandations que je vous ai faites plus haut @++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes. Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012 |
||||
|
00
|
|
|
#5 |
|
Membre chevronné
![]() |
Merci pour cette aide précise et claire.
Dans mon code Delphi, j'ai pu récupérer la valeur renvoyée dans un paramètre défini comme "retour de valeur" et ça fonctionne très bien. J'ai mis votre blog dans mes favoris, même si pour l'instant je n'ai pas vraiment le niveau requis pour tout comprendre. |
|
|
00
|
|
|
#6 |
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 669 ![]() |
Avec plaisir !
Si vous ne comprenez pas, demandez sur le forum ! @++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes. Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012 |
|
00
|
Copyright © 2000-2012 - www.developpez.com