我为之前的属性名称和值之后的值制作表格 如何使用更改跟踪来更改此表格?
答案 0 :(得分:0)
您可以使用“更改跟踪”跟踪操作,更改的列和新值。但是,无法从变更跟踪中获取旧值。 SQL Server 2016提供了新功能“更改数据捕获”,它在更新/删除之前为您提供有关旧值的所需信息(请参阅https://msdn.microsoft.com/en-us/library/bb933994.aspx)。
如果您无法访问SQL Server 2016,可以使用以下命令配置更改跟踪:
在数据库中激活
ALTER DATABASE <YourDatabase> f.e. DeviceDatabase
SET CHANGE_TRACKING = ON
(CHANGE_RETENTION = 2 DAYS, AUTO_CLEANUP = ON)
为您需要的表激活更改跟踪
ALTER TABLE <YourTable> f.e. Devices
ENABLE CHANGE_TRACKING
WITH (TRACK_COLUMNS_UPDATED = ON)
设置数据库作业,每分钟,每小时,每天(您需要的)将更改信息复制到自定义表中
DECLARE @minversion bigint;
SET @minversion = (SELECT MinVersion = CHANGE_TRACKING_MIN_VALID_VERSION(OBJECT_ID('Devices')) )
SELECT SYS_CHANGE_COLUMNS, e.Id FROM
CHANGETABLE(CHANGES Devices, @minversion) AS C
LEFT OUTER JOIN Devices AS e
ON e.Id = c.Id;
要获取更改列的最新值,您可以尝试此操作(但要注意同一行的多次更新。您只能获得最新值。)
CHANGE_TRACKING_IS_COLUMN_IN_MASK
(COLUMNPROPERTY(OBJECT_ID('Devices'), 'Id', 'ColumnId')
,c.sys_change_columns)
如果列更改,则返回1,否则返回0。您可以为表的每一列添加此值,并在值= 1时加入,然后将值添加到查询中。
最后,我建议您使用存储过程来更新/插入/删除表。在那些中,您可以轻松地插入要存储的有关自定义表中更改的所有信息。 如果您有SQL Server 2016,请尝试上面提到的,最终。
答案 1 :(得分:0)
实际上,如果您覆盖数据上下文类中的 3 _calendar
1 _cyrus
4 _devicemgr
1 _dovecot
1 _eppc
2 _jabber
1 _locationd
2 _postfix
1 _softwareupdate
1 _taskgated
6 _teamsserver
1 _warmd
1 _xserverdocs
11 root
方法,则可以访问SaveChanges()
。这将为您提供当前由上下文跟踪的所有实体及其ChangeTracker
(如果它们被添加/修改/删除/未更改等)。
在这里,您可以获取EntityState
类,并从中获取实体当前值和/或其先前值(如果实体处于修改状态。
DbEntityEntry
我目前使用这种方法对谁在做什么实体进行一些基本的审计。