我是否正确地评论了我的这条查询?

问题描述:

我觉得这应该是一个很好的评论,但我觉得我所拥有的仅仅是一种分心。我是否正确地评论了我的这条查询?

  1. 这是否值得评论?
  2. 如果是这样,这个评论可以改进吗?

请注意,我正在处理一个规范程度很差的应用程序。

( 
    /* Remove Time Portion From ActivityDate */ 
    DateAdd(Day, DateDiff(Day, 0, Activity.ActivityDate), 0) Not Between   
    /* Remove Time Portion From @MinimumDate Or SQL Server Min DateTime */ 
    DateAdd(Day, DateDiff(Day, 0, Coalesce(@MinimumDate, '1753-01-01')), 0) And 
    /* Remove Time Portion From @MaximumDate Or SQL Server Max DateTime */ 
    DateAdd(Day, DateDiff(Day, 0, Coalesce(@MaximumDate, '9999-12-31')), 0) 
) 
+1

你可能是最好的(如果这是在WHERE子句中),将@MinimumDate修改为'该日期的午夜',并且@MaximumDate变为'后一天的午夜',然后执行Activity.ActivityDate = @MaximumDate - 如果你在ActivityDate上有一个索引,那么这给了查询优化器一个战斗机会。 – 2010-07-12 22:40:58

+0

@愿意 - 现在这是一个好主意。 – ChaosPandion 2010-07-12 23:16:10

我包裹DATEADD/DATEDIFF在一个标量UDF与自我注释名称,然后通过在Activity.ActivityDateCoalesce(@MinimumDate, '1753-01-01'))作为参数

所以你有这样的:

( 
    dbo.ufnGetDateOnly (Activity.ActivityDate) NOT BETWEEN   
     dbo.ufnGetDateOnly (COALESCE(@MinimumDate, '1753-01-01')) AND 
     dbo.ufnGetDateOnly (COALESCE(@MaximumDate, '9999-12-31')) 
) 

你可以也有一个“约会如果空”参数,并在UDF处理COALESCE如果它足够常见的SQL代码

( 
    dbo.ufnGetDateOnly (Activity.ActivityDate, DEFAULT) NOT BETWEEN   
     dbo.ufnGetDateOnly (@MinimumDate, '1753-01-01') AND 
     dbo.ufnGetDateOnly (@MaximumDate, '9999-12-31') 
) 

现在很明显...没有?

+0

当我处理你的典型语言时,这样的事情会立刻变得明显。有一件事要考虑,但是在处理大型结果集时性能会相当大。 – ChaosPandion 2010-07-12 22:26:28

+0

@ChaosPandion:一行标量udf既不存在也不存在,即使对于大型结果集也是如此。在这种情况下,希望只有每一行都能解析Activity.ActivityDate。我倾向于在查询之前计算最小/最大值并使用局部变量... – gbn 2010-07-12 22:30:39

+0

好的,我该如何解释看似神奇的空置换值。如果SQL Server具有某种我可以使用的功能,那就太好了。类似于'MaxValue(DateTime)''。然后我可以再将它包装到一个函数中。 – ChaosPandion 2010-07-12 22:36:06

就个人而言,我觉得你不需要评论认为说removes X from Yincrements X by Y等等

话虽这么说,如果你觉得你需要注释的代码的特定部分,我尝试着重于功能的意图和大局。例如,为什么事情以这种方式实施?那样的话,下一个跟在你身后的人会有一个战斗机会,当他必须做出改变的时候。例如,我知道你的代码段的功能,但我不知道它为什么在那里,或者它如何与应用程序的其余部分相关。一个可能的改进可能是沿着某种功能的解释的东西,你会给某个新的代码或者可能不在乎的人它是如何实现的,但是为什么是

我总是不得不提醒自己,编程通信和更清楚你可以与其他程序员沟通你的意图,你会更好。如果您可以找到一种方法来添加可以提高开发人员之间沟通质量的评论,那就去做吧。我认为那些能够准确告诉你代码在做什么的评论会起到反作用,最终会伤害沟通。

这些评论对我很有帮助,因为如果他们不在那里,我不得不考虑那些行是干什么的。虽然正如罗伯特格雷纳所说,你为什么这样做也很好知道。

不是记录你做什么。它必须是自解释一行代码所做的。文档:

  • 块的实现逻辑的主要作用是什么? (例如函数,循环)
  • 约束,假设(空值?,线程安全?只读?)
  • 为什么它是这样而不是别的? (例如,体系结构决策,我们将使用这个XML解析,因为我们需要名称空间支持,并且因为另一个不支持EBDIC编码)
  • 这是一个大图片吗?它从哪里来的?
  • 架构(包括DB约束,假设,如逃脱?)
  • 的影响(如安全性考虑,副作用)
  • 相关性(如图书馆,页眉,在软盘上一个神奇的锁文件)