1

在此表中:

        Total           Data 
     -----------------------------
         1            2013-07-10 16:37:29.573
        1,5           2013-07-10 16:38:29.573
        0,75          2013-07-10 16:39:29.573
        1,99          2013-07-10 16:40:29.573

我一直在写这个 ms-sql 程序:

     ALTER proc [dbo].[empcx](@caixa int,@inicio datetime)as
     select sum(total) ttotal from alteraca 
     where (DATA >= @inicio AND DATA <= @inicio) and caixa=@caixa and pedido <>0

但我这样称呼我:

     empcx 6 , '11/07/2013'

并且只返回 null ,需要演员什么的???我要用这个参数在 C# 中调用这个过程

     label4.Text = dateTimePicker1.Value.ToShortDateString();   
4

2 回答 2

1

参数@inicio 的值为 2013-07-11 0:00:00.000;

但在程序中,您将此值与包含时间组件的日期进行比较,例如 2013-07-10 16:37:29.573

由于您使用的是 (DATA >= @inicio AND DATA <= @inicio),正如 Reband 先生上面评论的那样,它与 (DATA = @inicio) 相同,因此没有匹配行,因此返回 Null。

尝试

 ALTER proc [dbo].[empcx](@caixa int,@inicio datetime)as
     select sum(total) ttotal from alteraca 
     where (Convert(varchar(10),DATA,101) = Convert(varchar(10),@inicio,101))
       and caixa=@caixa and pedido <>0
于 2013-07-12T00:19:43.463 回答
0

我同意宾厄姆先生的回答,但我会使用稍微不同的方法进行比较:

 ALTER proc [dbo].[empcx](
   @caixa int,
   @inicio datetime
 )
 as
 select sum(total) ttotal 
 from   alteraca 
 where  (DATA >= @inicio AND DATA < DATEADD(dd, 1, @inicio)) 
   and  caixa=@caixa 
   and  pedido <>0

我还没有运行测试,但我相信这会更快。

此外,如果您的值total确实是您所显示的 - 逗号分隔的数字字符串 - 当您实际开始返回记录时,您的查询将崩溃。逗号分隔的字符串不能应用 SUM,因为它不能被解析为单个数字。

于 2013-07-13T16:06:18.723 回答