Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 我想从表中取出最后修改过的记录_Sql_Sql Server - Fatal编程技术网

Sql 我想从表中取出最后修改过的记录

Sql 我想从表中取出最后修改过的记录,sql,sql-server,Sql,Sql Server,我有一张主桌。我将获得一些添加到该表中的实时记录。我想获取在以前的现有记录中添加、更改或更改的所有记录 我怎样才能做到这一点 在使用usage_stats表之前,必须首先从sys.objects中搜索表并获取该对象id 若表中有标识列,则可以通过SQL查询找到最后插入的行信息。为此,我们有多种选择,如: 这三个函数都返回最后生成的标识值。但是,在每个功能中定义last的范围和会话不同 您可以使用两种常用方法: 通过触发器跟踪另一个表的更改 应该与此类似: CREATE TABLE Track

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

我怎样才能做到这一点

在使用usage_stats表之前,必须首先从sys.objects中搜索表并获取该对象id

若表中有标识列,则可以通过SQL查询找到最后插入的行信息。为此,我们有多种选择,如:

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


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

  • 通过触发器跟踪另一个表的更改
应该与此类似:

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
  • 在表中包括
    CreatedDate
    ModifiedDate
    IsDeleted
    CreatedDate
    应具有当前日期的默认值,
    ModifiedDate
    应在每次更新数据时更新,并且在删除(而不是实际删除)时应标记
    IsDeleted
    。此选项比上一个选项需要更多的处理,并且您将无法跟踪连续更新

您可以在该表上添加触发器。
@@IDENTITY
SCOPE_IDENTITY
IDENT_CURRENT
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