2013-07-11 4 views
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 [email protected] and pedido <>0 

, но я называю я этот путь:

 empcx 6 , '11/07/2013' 

и только возвращает null, нужен ли какой-нибудь актер или что-то ??? я собирающийся вызвать эту процедуру в C# с этим параметром

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

'DATA> = @inicio AND DATA <= @ inicio' =' DATA = @ inicio' –

+1

Да, как указано в заявлении @ mr.Reband, предложение where отфильтровывает все значения, кроме тех, где DATA = '@inicio' , Что вы пытались выполнить в своей статье? – mmarie

ответ

1

значение параметра @inicio является 2013-07-11 0: 00: 00,000;

но в процедуре вы сравниваете это значение с датами, содержащими временную составляющую, например, 2013-07-10 16: 37: 29,573

, так как вы используете (DATA> = @inicio И ДАННЫХ < = @ inicio), который, как утверждает г-н Ребанд выше, совпадает с (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 [email protected] and pedido <>0 
0

Я согласен с ответом г-Bingham, но я бы использовал несколько иной метод, чтобы сделать сравнение:

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 [email protected] 
    and pedido <>0 

Я не запускать тесты, но я верьте, что это будет быстрее.

Кроме того, если ваши значения total - это действительно то, что вы показываете им как строки с номерами, разделяемыми запятыми - ваш запрос сработает, когда вы действительно начнете возвращать записи. Строка, разделенная запятыми, не может быть применена к ней, поскольку ее нельзя разобрать на один номер.

+0

Интересные изменения. Я буду изучать его когда-нибудь –

Смежные вопросы