sys.objects中究竟是什么CreateDate和ModifyDate

时间:2013-01-18 10:19:52

标签: sql sql-server sql-server-2008-r2

我继承了以下管理员查询并不时运行它,并完全理解它返回的内容:

--Loop until the Cursor was not able to fetch
WHILE (@@Fetch_Status >= 0)
BEGIN
    --Dump the results of the sp_spaceused query to the temp table
    INSERT  #TempTable
        EXEC sp_spaceused @TableName

    --Get the next table name
    FETCH NEXT FROM tableCursor INTO @TableName
END

--get rid of the Cursor
CLOSE tableCursor
DEALLOCATE tableCursor



--Select TABLE properties with SIZE -- Final step
SELECT name, 
convert(date,create_date) as CreateDate, 
convert(date,modify_date) as ModifyDate, 
numberofRows, 
dataSize

FROM sys.objects
join #temptable tm on
tm.tablename = sys.objects.name
WHERE type  in ('U')

order by modify_date 
GO

以下哪些字段?:

  1. “create_date”......我猜测“CREATE TABLE ...”运行时
  2. “modify_date”...上次更改表架构时是否这样?
  3. 他们中的任何一个是否告诉我上次数据是DELETED还是INSERTED到表格中? 如果没有,那我该如何获得这些信息?

1 个答案:

答案 0 :(得分:4)

BOL说什么

  

修改日期 - 使用ALTER修改上次修改对象的日期   声明。如果对象是表或视图,还可以使用modify_date   创建表或视图上的聚簇索引时更改或   改变。

所以有人添加了列或更改了表的模式

默认情况下,该信息(当有人插入/删除值时)未存储

如果您想要有人在表中插入值,您必须实现它 你可以在你的表中添加ChangeDate datetime列并添加触发器,它会插入适当的值,但是当数据被删除时它不会保留

典型的是,如果要记录数据更改,可以通过创建与要记录的表类似的表来实现它,添加“DataChange,operation,user”等列 并为UPDATE,INSERT,DELETE

实现DML触发器

或使用sql server更改数据来跟踪数据更改,但我个人从未使用过那个:)