我正在使用SQL Server 2005和Delphi 2010
我有ventas
表({1}}(PK)= id_sale,id_venta
(销售),(更多值),total
=州(有效/不活动)和estado
。
该表记录了商店所有商品的销售情况,我需要逐行注册累计总和。如果当天有多个班次,我使用州字段来指定班次中的销售额。我正在使用此查询:
cumulative
当我在SQL上运行它时,这个查询确实是我想要的,但是当我在delphi上执行它时,它只给出了大约151行431的结果,而不是完成。
这是我的delphi代码:
Declare @id integer;
set @id=(Select min(id_venta) from ventas where estado='activo');
while(select @id)<=(Select max(id_venta) from ventas)
begin
update ventas set acumulado=(select sum(total) from ventas
where id_venta<=@id and estado='activo') where id_venta=@id
select @id=@id+1
end
我需要做什么才能完成Delphi中的查询?
编辑:
发生了奇怪的事情,我尝试conect.Q_equivalencias.Active:=false;
conect.Q_equivalencias.SQL.Clear;
conect.Q_equivalencias.SQL.Add('Declare @id integer; set @id=(Select min(id_venta) from ventas where estado='+char(39)+'activo'+char(39)+' );');
conect.Q_equivalencias.SQL.Add('while(select @id)<=(Select max(id_venta) from ventas) begin');
conect.Q_equivalencias.SQL.Add('update ventas set acumulado=(select sum(total) from ventas ');
conect.Q_equivalencias.SQL.Add('where id_venta<=@id and estado='+char(39)+'activo'+char(39)+') where id_venta=@id');
conect.Q_equivalencias.SQL.Add('select @id=@id+1 end');
conect.Q_equivalencias.ExecSQL;
conect.Q_equivalencias.Open;
conect.Q_equivalencias.ExecSQL;
,{I} error creating cursor handler
但它完成了查询,所有行都更新了,为什么呢?
试了很多东西,似乎我对delphi的查询只更新了152行......
答案 0 :(得分:2)
在查询开头添加SET NOCOUNT ON;
可能会解决问题。
那就是说,我会使用单个UPDATE
语句(甚至更好的VIEW
或计算列)而不是这样的奇怪查询。我不确定查询是否实际执行了您真正希望它执行的操作,但以下单个语句应该是等效的:
UPDATE ventas
SET acumulado=(
SELECT SUM(v.total)
FROM ventas v
WHERE v.id_venta<=ventas.id_venta AND estado='activo'
) WHERE id_venta>=(
SELECT MIN(id_venta)
FROM ventas
WHERE estado='activo'
);