2009-08-25 5 views
0

Quelle serait la construction SQL universelle correcte pour obtenir la dernière ligne insérée (ou sa clé primaire). L'ID peut être générée automatiquement par une séquence, mais je ne veux pas du tout traiter la séquence! J'ai besoin d'obtenir l'ID en interrogeant la table. Sinon, INSERT peut être étendu pour renvoyer l'ID. Supposons que j'insère toujours une seule ligne. La solution devrait fonctionner avec la plupart des SGBDR.Construction SQL universelle pour récupérer la dernière ligne insérée

+4

Il n'y a pas de solution universelle, en dehors de l'ajout d'un horodatage –

+0

Je serais heureux avec une solution de travail avec hsqldb, postgresql, sql server 2005, Oracle, MySQL et DB2 –

Répondre

2

la meilleure façon est de dépendre de la séquence comme:

select Max(ID) from tableName 

mais si vous ne voulez pas y faire face, vous pouvez ajouter une nouvelle colonne d'horodatage à votre table puis sélectionnez max de cette colonne .

comme cette façon

select Max(TimestampField) from tableName 
+0

Ajout d'un L'horodatage n'est pas une option pour moi. Mon application ne doit pas modifier la structure de la table. –

+0

La solution de séquence fonctionne pour moi. Il est probablement important de noter que Max (ID) donnera un résultat incorrect si votre seqeunce roule (cycles plus). Dans mon cas, ce n'est pas pertinent. Merci. –

+0

Vous devez vous assurer que votre niveau d'isolement est tel que vous ne verrez pas les ID insérés par d'autres transactions. Et max (TimeStampField) exigera que les écritures ne viennent pas trop souvent, de sorte que deux écritures ne sont pas dans la résolution de ce champ. –

Questions connexes