0

我有一个表 A 有列Family ID, Name, Addr。如何在表中找到最近修改的行?这可以在表格中不添加任何列的情况下完成吗?

4

3 回答 3

2

不,SQL Server 不会跟踪何时将行添加到表或修改。您需要通过添加一列来做到这一点:

ALTER TABLE dbo.A ADD RowAdded DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP;

当然,这会将所有现有行设置为现在,因此它仅适用于未来的新行。如果您还想修改时间,可以添加一个附加列:

ALTER TABLE dbo.A ADD RowChanged DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP;

并通过触发器使其保持最新状态:

CREATE TRIGGER dbo.A_modified
ON dbo.A
FOR UPDATE 
AS
BEGIN
  UPDATE A SET RowChanged = CURRENT_TIMESTAMP
    FROM dbo.A as A INNER JOIN inserted AS i
    ON A.ID = i.ID;
END
GO
于 2012-07-19T12:16:25.607 回答
0

除非您还没有编写修改时间(或时间戳),否则您无法找到这些行。

您还可以添加记录修改 ID 的触发器,但这听起来不是更好的解决方案。

如果要查找由 DML 语句修改的数据,可以使用 OUTPUT 子句。

于 2012-07-19T12:12:58.523 回答
0

最简单的方法是添加一个“lastUpdated”列。除此之外,没有真正简单的方法可以实现这一目标。

于 2012-07-19T12:15:49.127 回答