我有一张主表。我将获得一些实时记录添加到该表。我想获取在先前现有记录中添加,更改或更改的所有记录。
我怎样才能实现这一目标?
答案 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
CreatedDate
,ModifiedDate
和IsDeleted
列。 CreatedDate
应该有默认的当前日期,每次更新数据时都应更新ModifiedDate
,并且在删除(而不是实际删除)时应标记IsDeleted
。此选项需要比前一个更多的处理,并且您将无法跟踪连续更新。