如何为表的创建用户、创建日期、修改用户、修改日期编写查询
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:按开始日期和结束日期描述的用户元数据 - 创建跨多个表的排列