如何获取最近30天的记录?

时间:2016-04-26 10:47:07

标签: sql sql-server-2008 datetime

我正在使用MSServer,我有一个特定的表,我想检索最近30天的插入或修改数据。 我的表中没有保存创建日期的东西,我想知道Master数据库中是否有一些跟踪可以提供帮助。 感谢。

2 个答案:

答案 0 :(得分:1)

如果没有指示,添加行时没有正确的方法。

答案 1 :(得分:0)

您可以尝试访问事务日志并获取按时间戳排序的所有插入事务的列表。然后找到上个月最后一个插入行的时间戳。这些将导致您(希望)在上个月的最后一个插入行的末尾(具有更高ID的所有行将是您正在寻找的数据)。

一步一步(可能需要根据您的情况对查询进行一些调整):

获取交易:

declare @TableName sysname

set @TableName = 'Table_1'

select [Current LSN],
[Operation], 
[Transaction ID], 
[Parent Transaction ID],
[Begin Time], [Transaction Name],
[Transaction SID]
from fn_dblog(null, null)
where [Operation] = 'LOP_BEGIN_XACT'
and  [Transaction ID] 
in
(   
    -- get transaction id's from your table (inserts)
    SELECT [Transaction ID]
    FROM fn_dblog(NULL, NULL) 
    WHERE 
    Operation = 'LOP_INSERT_ROWS'
    and
    AllocUnitName LIKE '%' + @TableName + '%'
)
order by [Begin Time] ASC

获取最后一笔交易:

    SELECT *
    FROM fn_dblog(NULL, NULL) 
    WHERE Operation = 'LOP_INSERT_ROWS'
    and [Transaction ID] = 'XXX' -- your transaction id 

在den Row Log Content Rows中,您可以找到上个月最后一行插入数据的值。现在,您只需要根据以下网站将插入的数据转换为“可读”数据:

http://www.sqlshack.com/reading-sql-server-transaction-log/

现在,在将插入的数据转换回“可读”数据之后,您应该能够找到插入到表中的上个月的相关最后一行。之后插入ID高于此值的所有行,从而插入您要查找的数据。