您可以尝试访问事务日志并获取按时间戳排序的所有插入事务的列表。然后找到上个月最后插入的行的时间戳。这些将引导您(希望)在最后插入上个月的最后一行(所有具有较高 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 高于该 ID 的行都会稍后插入,因此是您要查找的数据。