MSSQL2008中的默认值或绑定的良好做法?

时间:2009-04-03 11:59:53

标签: .net sql-server-2008 default-value

如果您在MSSQLServer2008中的列上设置了datetime数据类型,它为您提供了日期,则最好让.NET层传递当前日期或将列的默认值或绑定设置为(getdate( ))?

4 个答案:

答案 0 :(得分:4)

我认为让SQL服务器处理类似项目的日期会更好。如果客户端传递了日期,那么如果客户端位于不同的时区,或者如果一个客户端在其计算机上设置了错误的日期,则可能会遇到问题。另外,您需要在命令中发送的项目少一个。

答案 1 :(得分:1)

我的观点是,只要方法一致,它在你做的地方没有多大区别。

我怀疑它在性能或可维护性方面有很大的不同。

我的偏好是使用getdate()在数据库中创建它,但这会导致使用ORM时传递的问题。

答案 2 :(得分:1)

您应该考虑以UTC而不是服务器本地时间写入时间。这样,如果您必须将服务器从一个时区移动到另一个时区,则没有任何问题。

作为一个例子,我们将服务器从德克萨斯州搬到加利福尼亚州。主要生产应用程序将UTC时间用于所有日期时间值。然而,票务系统使用服务器时间,并且票务应用程序将值更改为用户本地时间,假设服务器位于德克萨斯州。当我们将服务器移动到加利福尼亚并且价值都是2个小时的时候,一切都会变得非常混乱。

答案 3 :(得分:0)

我会使用默认值GETDATE()创建该列,但我会将存储过程设置为实际值。 我认为让INSERT语句不包含所有列是不好的做法。

在适当的时候,我喜欢在事务开始时将变量@RunDate设置为GETDATE(),并使用@RunDate标记所有CreateDate和LastChgDate列。我从不在主键中使用日期,所以如果它们有点或相同,则无关紧要。我觉得最好同时看到用户创建/更改的所有内容。