我想从表中获取最后更改的记录

时间:2018-04-03 08:38:51

标签: sql sql-server

我有一张主表。我将获得一些实时记录添加到该表。我想获取在先前现有记录中添加,更改或更改的所有记录。

我怎样才能实现这一目标?

2 个答案:

答案 0 :(得分:0)

  

您必须首先从sys.objects搜索您的表并在使用usage_stats表之前获取该对象ID。

 declare @objectid int
 select @objectid = object_id from sys.objects where name = 'YOURTABLENAME'

 select top 1 * from sys.dm_db_index_usage_stats where object_id = @objectid
 and last_user_update is not null
 order by last_user_update
  

如果表中有Identity列,您可以通过SQL查询找到最后插入的行信息。为此,我们有多个选项,如:

@@IDENTITY
SCOPE_IDENTITY
IDENT_CURRENT
  

所有三个函数都返回最后生成的标识值。但是,在每个函数中定义last的范围和会话都不同。

答案 1 :(得分:0)

您可以使用2种常用方法:

  • 通过触发器跟踪另一个表的更改。

应该是类似的东西:

CREATE TABLE Tracking (
    ID INT,
    -- Your original table columns
    TrackDate DATETIME DEFAULT GETDATE(),
    TrackOperation VARCHAR(100))

GO

CREATE TRIGGER TrackingTrigger ON OriginalTable AFTER UPDATE, INSERT, DELETE
AS
BEGIN

    INSERT INTO Tracking(
        ID,
        TrackOperation
        -- Other columns
        )
    SELECT
        ID = ISNULL(I.ID, D.ID),
        TrackOperation = CASE
            WHEN I.ID IS NOT NULL AND D.ID IS NOT NULL THEN 'Update'
            WHEN I.ID IS NOT NULL THEN 'Insert'
            ELSE 'Delete' END
        -- Other columns
    FROM
        inserted AS I
        FULL JOIN deleted AS D ON I.ID = D.ID -- ID is primary key

END

GO
  • 在您的表格中加入CreatedDateModifiedDateIsDeleted列。 CreatedDate应该有默认的当前日期,每次更新数据时都应更新ModifiedDate,并且在删除(而不是实际删除)时应标记IsDeleted。此选项需要比前一个更多的处理,并且您将无法跟踪连续更新。