更新datetime2中的时间戳

时间:2014-03-14 08:58:24

标签: sql sql-server triggers datetime2

我们有一个旨在在MS SQL 2005上运行的软件,我们已将数据库升级到2008 R2,并且正在尝试使用Datetime2而不是Datetime来提高时间戳的准确性。软件运行仍然没有改变,并具有Datetime的准确性。但是有一个额外的字段用正确的ms更新。

所以我的问题是;是否有针对datetime2的触发器的最佳实践,并用正确的值替换MS-part?我本来希望避免杯子要求转换成字符串然后再回来但是还没有找到一个好的功能。

1 个答案:

答案 0 :(得分:0)

这似乎可以完成这项工作:

create table T (ID int not null, Stamp1 datetime2 not null,
                RealMillis int not null);
go
create trigger TT on T
instead of insert
as
    set nocount on;
    insert into T(ID,Stamp1,RealMillis)
    select
        ID,
        DATEADD(millisecond,RealMillis - DATEPART(millisecond,Stamp1),Stamp1),
        RealMillis --or 0 now that it's been used?
    from inserted;
go
insert into T(ID,Stamp1,RealMillis) values (1,'2014-03-14T10:01:29.343',344);
go
select * from T;

我选择将其作为instead of触发器执行,因为它避免了必须首先将错误的数据写入表中。