문제점이있는 SQL 커서가 있습니다. 커서 내부에서 IF @debug = 1
문을 제거하면 FETCH
의 첫 번째 레코드 만 업데이트되지만, IF @debug = 1
을 그대로두면 필요한 모든 레코드가 업데이트됩니다. 왜 이런 일이 벌어지고 있는지에 대한 아이디어는 내 Cursor에 문제가있을 가능성이 가장 높습니다. 코드는 다음과 같습니다.SQL 커서 내의 코드는 첫 번째 FETCH 만 실행합니다.
DECLARE Verify_Shipment_Cur CURSOR LOCAL FAST_FORWARD READ_ONLY FOR
SELECT DISTINCT lpd_shipment_id, lpd_po_number, lpd_customer_id, lpd_sku, lpd_lottable01, lpd_lottable02, lpd_lottable03, lpd_putaway_zone, lpd_pdt
FROM PO_DETAIL01(NOLOCK)
WHERE lpd_shipment_id = @i_SHIPMENT_ID
AND lpd_po_number = @i_POKEY
AND lpd_customer_id = @i_CUSTOMER_ID
AND lpd_status = @AvailableStatus
OPEN Verify_Shipment_Cur
WHILE @ShipmentSKUCount >= @ShipmentSKUCountCur
BEGIN
FETCH NEXT FROM Verify_Shipment_Cur INTO @ShipmentID, @POKey, @CustomerID, @SKU, @Lottable01, @Lottable02, @Lottable03, @PutawayZone, @PDT
IF EXISTS(SELECT 1 FROM PO_DETAIL(NOLOCK) WHERE pd_asn_number = @i_SHIPMENT_ID AND pd_po_number = @i_POKEY
AND pd_sku = @SKU AND pd_type = @ShmtType AND pd_ordered_qty <> pd_received_qty)
BEGIN
UPDATE PO_DETAIL
SET pd_adjusted_qty = pd_ordered_qty - pd_received_qty
WHERE pd_asn_number = @i_SHIPMENT_ID
AND pd_po_number = @i_POKEY
AND pd_sku = @SKU
AND pd_type = @ShmtType
END
UPDATE PO_DETAIL
SET pd_lottable01 = @Lottable01
, pd_lottable02 = @Lottable02
, pd_lottable03 = @Lottable03
, pd_lottable04 = ''
, pd_lottable05 = @Date
, pd_putaway_zone = @PutawayZone
, pd_pdt = @PDT
, pd_status = @VerifiedStatus
WHERE pd_asn_number = @i_SHIPMENT_ID
AND pd_po_number = @i_POKEY
AND pd_sku = @SKU
AND pd_type = @ShmtType
UPDATE PO_DETAIL01
SET lpd_status = @VerifiedStatus
WHERE lpd_shipment_id = @i_SHIPMENT_ID
AND lpd_po_number = @i_POKEY
AND lpd_customer_id = @i_CUSTOMER_ID
AND lpd_status = @AvailableStatus
IF @debug = 1
BEGIN
SELECT @ShipmentSKUCount AS SKUCOUNT
, @ShipmentSKUCountCur AS SKUCOUNTCUR
, @SKU AS SKU
, @ShipmentID AS SHIPMENT
, @POKey AS POKEY
END
SET @ShipmentSKUCountCur = @ShipmentSKUCountCur + 1
END
CLOSE Verify_Shipment_Cur
DEALLOCATE Verify_Shipment_Cur
나는 당신이 추천 한대로 데이터 흐름이 좋아 보인다. 내가 볼 수있는 문제는 없습니다. – jorame
따라서 디버그를 켜고 끌 때 흐름이 올바르게 작동합니까? –