如何获取Sybase数据库中所有表的上次修改列

时间:2015-01-05 09:21:32

标签: sybase

我正在尝试编写一个sybase查询,以了解如何获取SYBASE数据库中所有表的最后修改列和时间戳。请在下面找到sql。但这不是准确的..它在一个syabase DB对象中工作而不在另一个环境中工作。请帮助我使用正确的sql。

select TableName=object_name(ss.id), RowCnt=st.rowcnt,
ColName=col_name(ss.id,convert(int,substring(ss.colidarray,1,2))),
UpdStatsDate=convert(varchar(20),moddate,100),
DaysAgo=datediff(dd,moddate,getdate())
from sysstatistics ss, systabstats st
where ss.id > 100 and st.id > 100
and ss.id=st.id
and ss.formatid=100
and st.indid in (0,1)
and ss.c4 is not null
order by TableName, ColName

1 个答案:

答案 0 :(得分:4)

Sybase ASE在最后修改列时不会跟踪。您可以在表中包含一列数据类型“timestamp”,但是当更新行中的任何列时,将更新此值。此外,这样的“时间戳”列不能反映现实世界的时钟时间,而是基于内部“数据库时间戳”的人工内部计数器(再次,与现实世界中我们称之为“时间”的内容无关) )。有关该时间戳的含义的更多信息,请参阅我的书“提示,技巧和帮助”的第13章。 Sybase ASE的配方'(sypron.nl/ttr)。

但更重要的是,sysstatistics.moddate列不会反映列更新的时间。相反,它是上次更新列的统计的时间(作为运行UPDATE STATISTICS的结果)。

如果要跟踪列的上次更新时间,可以使用UPDATE触发器执行此操作,该触发器检测更新的列以及时间,并将其记录在单独的表中。请注意,这种触发器很快就会成为繁忙系统的瓶颈。