如何为表的创建用户、创建日期、修改用户、修改日期编写查询

Posted

技术标签:

【中文标题】如何为表的创建用户、创建日期、修改用户、修改日期编写查询【英文标题】:How to write query for created User, Created date, Modified User, Modified date for a table 【发布时间】:2010-12-14 14:45:50 【问题描述】:

我需要帮助了解如何自动使表加载 Created user 、 created date 、 modified user 和 modified date 的值,

一旦任何数据进入表中,我们应该修复创建用户和创建日期列的值,但修改用户和修改日期应该改变

【问题讨论】:

什么表,加载到哪里,使用什么语言?你有表结构吗? 【参考方案1】:

您可以将日期时间列的默认值设置为GetDate(),将当前用户的默认值设置为SYSTEM_USER。这有利于创建记录。

修改列需要添加触发器。

也值得一读……

How to use system_user in audit trigger but still use connection pooling?

【讨论】:

【参考方案2】:

承认你的表结构看起来像这样 - 不要忘记 DEFAULT GETDATE()- :

YourTable
---------
CreatedUser
CreatedDate  DEFAULT GETDATE()  
ModifierUser   
ModifierDate

在插入时,您会触发一个将 ModifiedUser 和 ModifiedDate 更新为 GETDATE() 的函数

【讨论】:

【参考方案3】:

对于 createdby 和 createtime,您可以使用列默认值:

CreatedAt DATETIME DEFAULT GETDATE(),
CreatedBy VARCHAR(100) DEFAULT USER

对于 UpdatedAt,您必须创建一个设置值的触发器:

CREATE TRIGGER [t_Table_upd] ON YourTable AFTER UPDATE AS 
set nocount on 
UPDATE YourTable
set 
    YourTable.[Modified] = getdate(), 
    YourTable.[ModifiedBy] = USER, 
    YourTable.[Version] = YourTable.[Version] + 1 
FROM
    DELETED d
WHERE
    YourTable.ID = d.ID

【讨论】:

但是如果我使用 sql 身份验证,它将如何使用 windows 用户名而不是 sql 身份验证名称 当你使用sql认证时,sql server无法根据windows用户名猜测你是谁。当您使用 windows 身份验证连接时,NAME 将返回经过身份验证的 windows 用户名:msdn.microsoft.com/en-us/library/ms186738.aspx

以上是关于如何为表的创建用户、创建日期、修改用户、修改日期编写查询的主要内容,如果未能解决你的问题,请参考以下文章

维度建模创建/修改日期/人

BigQuery:按开始日期和结束日期描述的用户元数据 - 创建跨多个表的排列

如何为“日期”创建索引?

如何为开始日期和结束日期之间的每个工作日创建多行

在MSSQL SERVER2005中,如何给用户授予只有创建表、没有删除表及修改表结构的权限

使用 bigquery 表 GET api 获取表的最后修改日期