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

Sql server 获取SQL Server中上次更新的行的标识,sql-server,stored-procedures,sql-update,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,我在查询中没有使用它。您可以尝试使用以下方法:

@@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
,我在查询中没有使用它。

您可以尝试使用以下方法:

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

希望这有帮助。

您无法检索ID,因为没有插入ID

但你可以:

  • 只需使用与
    更新中相同的条件查询表即可:

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

    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
    

  • 在Technet上-它可以用于插入和删除

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

    尝试使用 选择@@identity为特定会话提供上次更新的标识 (或) select scope_identity为特定作用域提供上次更新的标识 (或)
    select ident_curr('tablename')给出上次更新的标识,与会话或作用域无关,但用于该特定表。

    如何使用相同的where子句触发select?请注意,输出前没有逗号