我需要知道表格中的数据上次修改的时间(插入,创建,删除数据)。常见的答案是从sys.dm_db_index_usage_stats中提取数据,但我无法访问该表,据我所知,访问该表是服务器级权限,因为这是在公司共享服务器上,允许我访问的IT部门的可能性随着猪的飞行而增加。
有没有办法获取这些信息,不需要大幅提升权限?
更新#1
一些其他信息:我正在做的是在本地缓存此表的内容,并且需要知道何时更新我的本地缓存。这意味着:
更新#2
我应该尽早做到这一点,但我只是假设我可以根据需要创建表格......但我不是。许可未获批准。所以提出的方法都不会起作用: - (
这是我的新想法:我可以致电
select checksum_agg(binary_checksum(*))
并获取整个远程表的校验和。然后,如果校验和发生更改,我知道表已更改,我可以更新本地缓存。我已经看过problems with checksum,但使用HASHBYTES听起来会更复杂,也更慢。
这是有效的,问题是当校验和发生变化时,我必须重新加载整个缓存。我的表有很多行,每行返回校验和需要一个不可接受的长时间,有没有办法使用" OVER"子句并得到10个校验和,第一行的第一个校验和等等?
答案 0 :(得分:1)
If you can modify their schema, then you should be able to add a trigger.
Once you add a lastmodified column, you can use this trigger to get the time updated any time the record changes:
CREATE trigger [dbo].[TR_TheirTable_Timestamp]
on [dbo].[TheirTable] for update
as
begin
update
dbo.TheirTable
set
lastmodified=getdate()
from
Inserted
where
dbo.TheirTable.UniqueID=Inserted.UniqueKey
end
The reason I do it only for update, and not insert is because I can see a new record, and I don't need a timestamp, but a modified record I can compare the time I last updated the record. if you want an insert update, then
on [dbo].[TheirTable] for insert,update
would work
If you just wanted to know when the table was updated, then the trigger could write to another table with the tablename and date, and you wouldn't have to modify their schema