SQL Server:对列强制值以进行插入或更新

SQL Server:对列强制值以进行插入或更新,sql,sql-server,tsql,triggers,database-trigger,Sql,Sql Server,Tsql,Triggers,Database Trigger,在SQL Server中,我正在寻找一个触发器来强制“create”和“last_update”列中的某些值。这些将用于“创建时间”、“创建用户”、“上次更新时间”和“上次更新用户” 在插入时,我希望强制执行以下操作: 'create_time' = CURRENT_TIMESTAMP 'create_user' = CURRENT_USER 'last_update_time' = CURRENT_TIMESTAMP 'last_update_user' = CURRENT_USER 'cr

在SQL Server中,我正在寻找一个触发器来强制“create”和“last_update”列中的某些值。这些将用于“创建时间”、“创建用户”、“上次更新时间”和“上次更新用户”

在插入时,我希望强制执行以下操作:

'create_time' = CURRENT_TIMESTAMP
'create_user' = CURRENT_USER
'last_update_time' = CURRENT_TIMESTAMP
'last_update_user' = CURRENT_USER
'create_time' = <unchanged>
'create_user' = <unchanged>
'last_update_time' = CURRENT_TIMESTAMP
'last_update_user' = CURRENT_USER'
更新时,我希望强制执行以下内容:

'create_time' = CURRENT_TIMESTAMP
'create_user' = CURRENT_USER
'last_update_time' = CURRENT_TIMESTAMP
'last_update_user' = CURRENT_USER
'create_time' = <unchanged>
'create_user' = <unchanged>
'last_update_time' = CURRENT_TIMESTAMP
'last_update_user' = CURRENT_USER'
“创建时间”=
“创建用户”=
“上次更新时间”=当前时间戳
“上次更新用户”=当前用户”

我将如何执行此操作,以及将其放置在什么位置?这是在DDL、存储过程还是其他地方?

您可以在创建时间和上次更新时间上设置默认值,以便插入记录时,这两列的默认值都为当前日期/时间。因为当记录更新时,您必须在update语句中设置它。对于用户来说,这取决于您所说的用户是什么意思?正在使用您的应用程序的用户(那么您必须将其作为参数传递给查询/存储过程?或者正在SQL中执行代码的用户?嗨,Brad,非常感谢您的回复。-默认值当然是可能的。如果用户尝试插入其他内容,是否有一种方法可以覆盖值?-很清楚,用户将是在SQL中执行代码您可能会阅读
而不是TRIGGER
,但是也有回退…您不希望用户插入日期,您希望强制插入什么?那么在代码/存储过程中,不要给触发器这样做的机会,只需将值硬编码为GetDate()对于当前日期。要获取正在执行脚本的用户,我相信您可以使用SELECT current_user,如果您的应用程序有一个用户,并且您希望使用该用户,则必须将其传递给代码