获取SQL Server中上次更新的行的标识

时间:2014-04-08 08:31:22

标签: sql-server stored-procedures sql-update

@@IDENTITY返回已插入的最后一行的ID,我想检索最后一行的ID 已更新

这是我的问题:

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

如何获取此更新行的ID?

该列名为TableID,我在查询中没有使用它。

4 个答案:

答案 0 :(得分:14)

由于没有插入ID,您无法检索ID .....

但你可以:

  1. 只需使用UPDATE中的相同条件查询表格:

    SELECT TableID 
    FROM dbo.Table
    WHERE SC = @SC AND Service = @Ser  -- just use the same criteria
    
  2. 使用OUTPUT上的UPDATE子句获取该信息:

    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
    
  3. Technet上的

    Read more about the OUTPUT clause - 它可以在INSERTDELETE上使用

答案 1 :(得分:7)

你可以试试这个:

OUTPUT INSERTED.TableID 
你的代码中的

看起来像这样:

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

希望这有帮助。

答案 2 :(得分:3)

我想你需要这个,

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

主要来源:here

答案 3 :(得分:0)

尝试使用 select @@ identity给出特定会话的最新更新标识 (要么) select scope_identity为特定范围提供上次更新的标识 (要么) select ident_curr(' tablename')给出最后更新的身份,无论会话或范围如何,但是对于该特定的表。