Sql 保存到数据库时,我应该从何处获取日期?

Sql 保存到数据库时,我应该从何处获取日期?,sql,date,Sql,Date,我一直在做代码审查,我遇到一个代码,它设置了如下日期: using (var cmd = new SqlCommand("Item_Update", con)) { cmd.CommandType = CommandType.StoredProcedure; cmd.Parameters.Add(new SqlParameter("@ItemId", item.Id)); cmd.Parameters.Add(new SqlParameter("@Active", f

我一直在做代码审查,我遇到一个代码,它设置了如下日期:

using (var cmd = new SqlCommand("Item_Update", con))
{
    cmd.CommandType = CommandType.StoredProcedure;

    cmd.Parameters.Add(new SqlParameter("@ItemId", item.Id)); 
    cmd.Parameters.Add(new SqlParameter("@Active", false));
    cmd.Parameters.Add(new SqlParameter("@DeactivatedBy", item.DeactivatedBy));
    cmd.Parameters.Add(new SqlParameter("@DeactivatedDt", DateTime.Now)); 

    cmd.ExecuteNonQuery();
}
此代码将更新设置停用日期和人员的项目。请注意,此处我们设置的时间类似于“DateTime.Now”,即执行代码时web服务器的时间

但同时,我们有一个存储过程来更新该项,该存储过程还设置了DeactivateDt

UPDATE item
SET active = 0,
    chdt = GETDATE(),
    DeactivatedBy = @ExecUserName,
    DeactivatedDt = GETDATE()
FROM    
    item
WHERE   
    id = @itemId;
这两种情况都没有错,但我想知道在设定日期时,首选的模式是什么:

根据代码设置日期 从SQL Server设置日期 我不确定这是否是一个非常有趣的问题,但由于我不能100%确定在我的代码审查中应该回答什么,所以我决定问你们


感谢您的帮助。

老实说,无论您是从应用层还是数据库层更新日期,都不重要。这也可能是业务需求。然而,从标准化和审核的角度来看,维护整个应用程序的一致性更为重要。这种标准化将有助于将来在出现任何问题时审核应用程序

但是,在这种情况下,如果有机会,我建议DB layer在插入新记录时使用默认值GETDATE自动更新日期

同样,为了在更新时保持一致性,如果您的要求是将相同的日期设置为all,则可以执行以下操作:

DECLARE @currDate DATETIME;

SET @currDate = GETDATE();

UPDATE table SET date = @currDate;

注:以上代码未经测试

此后如何使用数据?如果它用于任何类型的过滤,那么最重要的是保持一致性

例如,如果代码和SQL在不同的机器上运行,并且时间差很小,那么如果使用不同的时钟,您可以停用一行,然后稍后通过查询活动行返回同一行

最好选择一个时钟,并在任何地方使用它——不仅仅是在这个例子中,而是在任何时间重要的地方


如果该时钟是SQL Server的时钟,通常会更容易。

使用SQL的当前日期。可以使用SQL提供的日期函数getdate获取更多信息,查看您正在使用的dbms。这里有一些非ANSI SQL。这个问题没有正确的答案。这取决于您要使用的日期或时间。您想使用web服务器或客户端计算机的时间,还是数据库服务器的时间?你必须做出决定。我和你的想法一样。谢谢你的回答