自动更新SQL Server中的列值

斯瑞吉斯·奈尔(Sreejith Nair)

我在SQL Server数据库中有一个表,其中包含一些列以及

CreatedBy (varchar)
CreatedOn (datetime)
UpdatedBy(varchar)
UpdatedOn(datetime)

作为标准列。CreatedOnCreatedBy值被自动填充如当有加入此表的新行(使用默认值的方法)。

问:有没有在SQL Server中的任何外的现成解决方案,它可以pupulateUpdatedOnUpdatedBy值和行更新的时候?

亨里克·斯汤恩·波尔森

除了添加Alex K等人提到的触发器外,还可以添加RowVersion列。该数据类型以前称为TimeStamp,但不幸的是,该名称具有误导性。

这将为您提供UpdatedOn的smalldatetime时间戳,但不会提供UpdatedBy信息。

如果要将RowVersion列转换为日期和时间格式,则需要做一些工作。

1.创建一个包含三列的表“ UpdateTimeStamp”

(CreatedDate Smalldatetime,NewRowVersion,OldRowVersion)像这样:

Create Table dbo.UpdateTimeStamp( OldRowVersion binary(8), CreatedDate DateTime constraint DF_UpdateTimeStamp_TimeStamp Default getdate(), NewRowVersion ROWVERSION CONSTRAINT PKUpdateTimeStamp PRIMARY KEY CLUSTERED )

手动插入第一行 Insert into dbo.UpdateTimeStamp(OldRowVersion, CreatedDate) VALUES (0x0000000000000000, '2000-01-01')

2.创建一个SQL Agent作业

每隔一分钟在表格中插入一行。

使第1步运行以下代码:

Insert into dbo.UpdateTimeStamp(OldRowVersion) SELECT TOP (1) NewRowVersion FROM dbo.UpdateTimeStamp ORDER BY NewRowVersion DESC 将时间表设置为每1分钟运行一次。

3.加入

使用之间的连接子句将UpdateTimeStamp表连接到您的表,如下所示:

SELECT top 10000 mt.*, uts.CreatedDate AS ModifiedDate FROM dim.MyTable MT 
LEFT JOIN dbo.UpdateTimeStamp uts ON MT.DT1RowVersion > OldRowVersion AND MT.DT1RowVersion <= NewRowVersion
ORDER BY uts.CreatedDate

嗨。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章