web-dev-qa-db-fra.com

Obtenir l'identité de la dernière ligne mise à jour dans SQL Server

@@IDENTITY renvoie le IDde la dernière ligne inséré , je souhaite récupérer l'ID de la dernière ligne updated .

Voici ma requête:

UPDATE [Table] 
SET Active = 1, 
    Subscribed = 1, 
    RenewDate = GETDATE(),
    EndDate = DATEADD(mm,1,getdate()),
WHERE SC = @SC
  AND Service = @Ser

Comment puis-je obtenir l'ID de cette ligne mise à jour?

La colonne s'appelle TableIDet je ne l'utilise pas dans la requête.

12
HelpASisterOut

Vous ne pouvez pas récupérer un ID car il n'y a pas d'identifiant inséré .....

Mais tu peux:

  1. interrogez simplement la table en utilisant les mêmes critères que dans votre UPDATE:

    SELECT TableID 
    FROM dbo.Table
    WHERE SC = @SC AND Service = @Ser  -- just use the same criteria
    
  2. utilisez la clause OUTPUT sur UPDATE pour obtenir cette information:

    UPDATE [Table] 
    SET Active = 1, 
        Subscribed = 1, 
        RenewDate = GETDATE(),
        EndDate = DATEADD(mm,1,getdate())
    OUTPUT Inserted.TableId       -- output the TableID from the table
    WHERE SC = @SC AND Service = @Ser
    

En savoir plus sur la clause OUTPUT sur Technet - elle peut également être utilisée sur INSERT et DELETE

13
marc_s

vous pouvez essayer d'utiliser ceci:

OUTPUT INSERTED.TableID 

dans votre code cela ressemblerait à ceci:

    UPDATE [Table] 
    SET Active = 1, 
        Subscribed = 1, 
        RenewDate = GETDATE(),
        EndDate = DATEADD(mm,1,getdate()),
OUTPUT INSERTED.TableID 
    WHERE SC = @SC
      AND Service = @Ser

J'espère que cela t'aides.

7
Mike

Je suppose que vous avez besoin de celui-ci,

UPDATE [Table] 
SET Active = 1, 
    Subscribed = 1, 
    RenewDate = GETDATE(),
    EndDate = DATEADD(mm,1,getdate())
    OUTPUT INSERTED.TABLE_PrimaryKeyID
WHERE SC = @SC
AND Service = @Ser

Source principale: ici

3
BAdmin

Essayez d'utiliser select @@ identity donne la dernière identité mise à jour pour la session particulière (ou) sélectionnez scope_identity donne la dernière identité mise à jour pour la portée particulière (ou) sélectionnez ident_curr ('nom_table') donne la dernière identité mise à jour indépendamment de la session ou de la cette table particulière.

0
sneha