Sql 更新游标内的多个表不工作

Sql 更新游标内的多个表不工作,sql,sql-server,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.

表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
当我看到结果时,只更新了第一条记录。

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

在第一次迭代完成后,是否检查@@FETCH\u STATUS=0?是的。实际上,正如您所看到的,在validation部分中,游标返回两条记录,但更新查询以获取最小值返回相同的数据。我认为由于更新在游标内,提交是在解除分配后完成的。这个查询有太多内容,很难说。while循环中的第二次提取可能会将与初始提取完全相同的数据拉入abc?表A始终带有[ID Incident]字段的空值。所以我计算这个字段=NULL的最小值,然后更新。当游标获取时,第二条记录必须是evaluate the same[ID Incident]=NULL,但它再次获取第一条记录,尽管更新是在第一次获取中完成的。如您所见,第一条记录似乎尚未更新。