sql server获取当前时间的方式和c#编译器获取它的方式可能有所不同吗?
我在sql server表中有一个触发器,每次更新时updateDatetime列都会更新为当前日期时间。
我使用current_timestamp
我还有一个连接到这个数据库的c#代码,并使用本机sql更新表,之后将创建触发器。
问题是我在NUnit中运行测试,我在那里进行更新,然后检索更改的行。如果我在测试开始时将updatedDatetime与当前的那个进行比较,则它们是不同的。
我使用DateTime.UtcNow
差异只是毫秒,但有趣的是,从测试开始的那个发生在触发器之后!这没什么意义。
这里有一些代码来说明我在说什么
DateTime dateTimeBefore = DateTime.UtcNow;
// Act
bookDao.Update(book);
// Assert
alteredBook = bookDao.GetByKey(bookingDao);
Console.WriteLine("dateTimeBefore: {0} - {1}", dateTimeBefore, dateTimeBefore.Millisecond);
Console.WriteLine("UpdateDateTime: {0} - {1}", alteredBook.UpdatedDateTime, alteredBook.UpdatedDateTime.Millisecond);
Assert.IsTrue(alteredBook.UpdatedDateTime >= dateTimeBefore);
这将是触发器
update Book
set UpdatedDatetime = current_timestamp
from inserted
where inserted.Id = Booking.Booking.Id
答案 0 :(得分:1)
current_time“派生自运行SQL Server实例的计算机的操作系统”,datetime.now也是如此。如果你的单元测试在nunit和你的sql server实例在另一台机器上运行的机器上运行,那么这两个值的比较结果取决于每台机器的本地时间设置。
此外,即使在同一台机器中,两个值(sql server datetime type和datetime.now的current_timestamp)具有不同的精度 - Converting from DateTime to SqlDateTime is inaccurate