我们的客户希望按记录创建日期订购。对我来说,这似乎是一个系统变量,记录本身的某种元数据。
有没有办法告诉创建记录什么时候没有实际创建一个默认为GetDate()的datetime字段,并希望没有人修改它?
我们的客户希望按记录创建日期订购。对我来说,这似乎是一个系统变量,记录本身的某种元数据。
有没有办法告诉创建记录什么时候没有实际创建一个默认为GetDate()的datetime字段,并希望没有人修改它?
不。
你需要有一个列。
想象一下,如果您需要为每个创建记录保留记录,那么元数据会有多大!您是否还希望在元数据上保留元数据,以便了解元数据何时更新?空间使用可以迅速升级。
SQL Server会保留一些统计信息,但这些特定信息需要来自用户定义的字段。
作为旁注,如果使用查找表,则可能会更难以篡改创建的字段上的日期。创建一个表“TableName_CreateDate”并使用实际表中的PK和日期值。您的日期位于一个单独的位置,不太可能被修改,但您仍然可以 JOIN
在它上面得到你的订单。您需要创建一个触发器以使用新值更新它。
如果你只想要的话 日期 并且不需要日期时间值,您可以更进一步,只需要一个日期表和一个连接到它的查找表。即:
Table->Table.PK + Date.Pk -> DateTable
如果你有很多行(我认为每行4个字节),这将节省大量的驱动器空间。
应添加creationdate字段。你通过在更新上添加一个不允许更新该字段的触发器来修复“希望没有人修改它”的部分。
不,据我所知,甚至不在系统表中。您可以通过旧的事务日志挖掘我确定,但本机上,没有。
我曾经遇到过一种情况,即需要表的行顺序,但没有时间戳(CreateDateTime,UpdateDateTime,...等)列可用。因此,只有我拥有的数据才是事务日志。直接读取事务日志没有用,因为它不容易解析。因此,我发现了一个名为“ApexSQL Log”的程序非常有用。它具有所有过滤选项,您可以在不进行核心操作的情况下读取所有日志数据。虽然这个解决方案对我来说是令人满意的,但它有一个缺点:您只能根据事务操作过滤日期(开始时间和结束时间)。如果您正在搜索查询操作,例如封装在事务中的插入操作,则无法检索确切的插入时间(至少我找不到方法),只能检索事务时间。如果您的操作都是原子操作,那么您可以直接获得所有行创建日期信息。
如果他只想通过它订购,你可以考虑使用 时间戳 柱。
它与现实世界日期无关,但您可以对其进行排序。
不。
你需要有一个列。
想象一下,如果您需要为每个创建记录保留记录,那么元数据会有多大!您是否还希望在元数据上保留元数据,以便了解元数据何时更新?空间使用可以迅速升级。
SQL Server会保留一些统计信息,但这些特定信息需要来自用户定义的字段。
作为旁注,如果使用查找表,则可能会更难以篡改创建的字段上的日期。创建一个表“TableName_CreateDate”并使用实际表中的PK和日期值。您的日期位于一个单独的位置,不太可能被修改,但您仍然可以 JOIN
在它上面得到你的订单。您需要创建一个触发器以使用新值更新它。
如果你只想要的话 日期 并且不需要日期时间值,您可以更进一步,只需要一个日期表和一个连接到它的查找表。即:
Table->Table.PK + Date.Pk -> DateTable
如果你有很多行(我认为每行4个字节),这将节省大量的驱动器空间。
应添加creationdate字段。你通过在更新上添加一个不允许更新该字段的触发器来修复“希望没有人修改它”的部分。
不,据我所知,甚至不在系统表中。您可以通过旧的事务日志挖掘我确定,但本机上,没有。
我曾经遇到过一种情况,即需要表的行顺序,但没有时间戳(CreateDateTime,UpdateDateTime,...等)列可用。因此,只有我拥有的数据才是事务日志。直接读取事务日志没有用,因为它不容易解析。因此,我发现了一个名为“ApexSQL Log”的程序非常有用。它具有所有过滤选项,您可以在不进行核心操作的情况下读取所有日志数据。虽然这个解决方案对我来说是令人满意的,但它有一个缺点:您只能根据事务操作过滤日期(开始时间和结束时间)。如果您正在搜索查询操作,例如封装在事务中的插入操作,则无法检索确切的插入时间(至少我找不到方法),只能检索事务时间。如果您的操作都是原子操作,那么您可以直接获得所有行创建日期信息。
如果他只想通过它订购,你可以考虑使用 时间戳 柱。
它与现实世界日期无关,但您可以对其进行排序。