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 に答える