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服务器或客户端计算机的时间,还是数据库服务器的时间?你必须做出决定。我和你的想法一样。谢谢你的回答