sql server获取当前时间的方式和c#编译器获取它的方式可能不同吗?
我在sql server表中有一个触发器,在每次更新时,updateDatetime列将被更新为当前日期时间。
我使用current_timestamp获取当前日期时间。
我还有一个连接到这个数据库并使用本机sql更新表的c#代码,更新后将创建触发器。
问题是我正在运行一个NUnit测试,在测试中我进行了一次更新,然后检索已更改的行。如果我比较更新后的DateTime与测试开始时的当前时间,它们是不同的。 我使用DateTime.UtcNow执行此操作。
差异只有几毫秒,但有趣的是,测试开始时的时间比触发器的时间晚!这没有意义。
以下是一些代码,以说明我的意思。
这是触发器的代码:
我在sql server表中有一个触发器,在每次更新时,updateDatetime列将被更新为当前日期时间。
我使用current_timestamp获取当前日期时间。
我还有一个连接到这个数据库并使用本机sql更新表的c#代码,更新后将创建触发器。
问题是我正在运行一个NUnit测试,在测试中我进行了一次更新,然后检索已更改的行。如果我比较更新后的DateTime与测试开始时的当前时间,它们是不同的。 我使用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
它与IT技术有关,涉及数据库更新操作。
SYSDATETIME
和GETDATE
。 - Martin Smith