Sql-server: triggersur et dernier identifiant inséré

J'ai une application PHP utilisant une database sql-server et sortinggger. Le stream de travail est le suivant:
– Je crée un object dans la BD,
– un triggersur enregistre la création dans une table dédiée, en insérant une ligne à l'intérieur,
– puis de PHP je reçois le dernier identifiant inséré.

Le problème est que le dernier ID inséré est lié à la ligne de journal et non à mon object.

Du code PHP, je ne peux pas faire d'une autre manière que cela est fait par mon ORM (Propel). Je dois donc le faire fonctionner du côté de la DB. Y a-t-il un moyen d'y parvenir, par exemple en disant que le triggersur ne doit pas être considéré comme un «dernier identifiant inséré»?

Vous devez utiliser SELECT SCOPE_IDENTITY () dans votre procédure stockée pour get le dernier ID créé dans la session en cours, scope.

Si vous utilisez une autre option , elle renverra l'ID de la table Log.

Vous devez utiliser Scope_Identity() . Cela obtient le dernier ID généré dans la session et la scope en cours (les triggersurs s'exécutent dans leur propre scope).

Vous avez plusieurs options: @@IDENTITY vs SCOPE_IDENTITY() vs IDENT_CURRENT

  1. SELECT @@IDENTITY

    Il renvoie la dernière valeur IDENTITY produite sur une connection, quelle que soit la table qui a produit la valeur, et indépendamment de la scope de l'instruction qui a produit la valeur.

  2. SELECT SCOPE_IDENTITY()

    Il renvoie la dernière valeur IDENTITY produite sur une connection et par une instruction dans la même étendue, quelle que soit la table qui a produit la valeur.

  3. SELECT IDENT_CURRENT('tablename')

    Il renvoie la dernière valeur IDENTITY produite dans une table, indépendamment de la connection qui a créé la valeur, et indépendamment de la scope de l'instruction qui a produit la valeur.

    IDENT_CURRENT n'est pas limité par la scope et la session; il est limité à une table spécifiée. IDENT_CURRENT renvoie la valeur d'identité générée pour une table spécifique dans toute session et toute scope.

http://blog.sqlauthority.com/2007/03/25/sql-server-identity-vs-scope_identity-vs-ident_current-resortingeve-last-inserted-identity-of-record/