更新游标内的多个表不起作用

时间:2015-11-25 21:05:51

标签: sql sql-server

我在表A中有两条记录。这有助于我更新表2,但是没有应用更新。这是SQL代码,我添加了一个验证部分,允许我确定问题。

DECLARE abc CURSOR FOR
select d.cod_suc, d.cod_ramo_comercial, d.nro_pol, d.cod_item, d.cod_ramo_tecnico, d.cod_tarifa,
d.id_stro, d.nro_stro, d.fec_hora_reclamo, d.fec_aviso, d.fec_registro, d.fec_ingreso_contable,
d.txt_place_of_accident, d.id_substro, d.txt_nombre_cober, d.txt_direccion_bien_siniestrado, d.txt_descripcion_perdida, d.txt_cheque_a_nom, d.cod_manager_code, d.importe_pago_eq
from table1 d
where d.fec_hora_reclamo between '20140801' and '20150731'
and (d.cod_suc = 2 and d.cod_ramo_comercial = 255 and d.nro_pol = 1000001 and d.cod_item = 5)

OPEN abc
FETCH abc INTO @cod_suc, @cod_ramo_comercial, @nro_pol, @cod_item, @cod_ramo_tecnico, @cod_tarifa,
@id_stro, @nro_stro, @fec_hora_reclamo, @fec_aviso, @fec_registro, @fec_ingreso_contable,
@txt_place_of_accident, @id_substro, @txt_nombre_cober, @txt_direccion_bien_siniestrado, @txt_descripcion_perdida, @txt_cheque_a_nom, @cod_manager_code, @importe_pago_eq


WHILE (@@FETCH_STATUS = 0)
BEGIN
    select @varIDPV = min(id_pv), @varCodTarifa = min(cod_tarifa)
    from #portfolio p
    where p.cod_suc = @cod_suc and p.cod_ramo_comercial = @cod_ramo_comercial and p.Poliza = @nro_pol and p.Item = @cod_item and p.cod_ramo_tecnico = @cod_ramo_tecnico
    and p.[ID Incident] IS NULL

    /**************************************************************************************************************
    -- Validation section
    -- First record:
        mid(id_pv) = 100, min(cod_tarifa) = 1
    -- Second record:
        mid(id_pv) = 100, min(cod_tarifa) = 1
        --> Should be mid(id_pv) = 100, min(cod_tarifa) = 2
    */
    select min(id_pv), min(cod_tarifa)
    from #portfolio p
    where p.cod_suc = @cod_suc and p.cod_ramo_comercial = @cod_ramo_comercial and p.Poliza = @nro_pol and p.Item = @cod_item and p.cod_ramo_tecnico = @cod_ramo_tecnico
    and p.[ID Incident] IS NULL
    /**************************************************************************************************************/

    update p set p.[ID Incident] = @id_stro, p.[No. Incident] = @nro_stro,
    p.[Fecha Accidente] = @fec_hora_reclamo, p.[Fecha Notificacion] = @fec_aviso, p.[Fecha Registro] = @fec_registro, p.[Fecha Pago] = @fec_ingreso_contable,
    p.[Lugar Accidente] = @txt_place_of_accident, p.[ID Subsiniestro] = @id_substro, p.[Cobertura Amparo] = @txt_nombre_cober, p.[Direccion Bien Siniestrado] = @txt_direccion_bien_siniestrado, p.[Descripcion Perdida] = @txt_descripcion_perdida, p.[Pago A] = @txt_cheque_a_nom, p.[Referida] = @cod_manager_code,
    [Incurrido R12] = @importe_pago_eq, [Incurrido Cerrados R12] = @importe_pago_eq
    from #portfolio p
    where p.cod_suc = @cod_suc and p.cod_ramo_comercial = @cod_ramo_comercial and p.Poliza = @nro_pol and p.Item = @cod_item and p.cod_ramo_tecnico = @cod_ramo_tecnico
    and p.[ID Incident] IS NULL and p.id_pv = @varIDPV and p.cod_tarifa = @varCodTarifa

    FETCH abc INTO @cod_suc, @cod_ramo_comercial, @nro_pol, @cod_item, @cod_ramo_tecnico, @cod_tarifa,
    @id_stro, @nro_stro, @fec_hora_reclamo, @fec_aviso, @fec_registro, @fec_ingreso_contable,
    @txt_place_of_accident, @id_substro, @txt_nombre_cober, @txt_direccion_bien_siniestrado, @txt_descripcion_perdida, @txt_cheque_a_nom, @cod_manager_code, @importe_pago_eq
END

CLOSE abc
DEALLOCATE abc

当我看到结果时,只更新了第一条记录。

1 个答案:

答案 0 :(得分:0)

我发现了问题。我忘了在更新中添加一个条件(在哪里)。感谢您的支持