Остановить обработку хранимой процедуры - PullRequest
0 голосов
/ 20 февраля 2020

У меня есть хранимая процедура, которая запускается при изменении статуса заказа на продажу. Процедура вставляет строку в таблицу, используя в качестве ключа номер заказа на продажу.

Моя проблема в том, что мне нужно остановить выполнение процедуры во второй (или третий) раз, если кто-то вернется и по какой-то причине изменяет заказ на продажу. Я пробовал несколько разных вещей, но ничего не помогло. Вот мой последний код, использующий NOT EXISTS. Он работает так же, как и предполагалось при первой вставке, но завершается неудачей, если я изменяю Заказ на продажу, потому что он пытается вставить дублирующую запись в таблицу AECStarCustom. Предложения?

Возможно, я не правильно использую NOT EXISTS. Я впервые использую его.

ALTER PROCEDURE PostStarshipFreight 
AS
    SET NOCOUNT ON;

    DECLARE @SalesOrder varchar(30);
    DECLARE @InternalID int;
    DECLARE @OrderStatus varchar(1);

    IF NOT EXISTS (SELECT TOP 1 @SalesOrder 
                   FROM AECStarCustom 
                   WHERE AECStarCustom.SalesOrder = @SalesOrder)
    BEGIN
        SET @InternalID = (SELECT TOP 1 ShipmentID 
                           FROM StarShip..ShipmentOrder 
                           WHERE OrderNumber = @SalesOrder)
        INSERT INTO TEST_AllenEng.dbo.AECStarCustom (InternalID, SalesOrder, BOLNumber, OrderNumber, SCAC, ProcessDateTime, ProNumber, DeliveryCharge, MasterTrackingID, TotalPackQty, FreightCharge)  
            SELECT
                o.ShipmentID, 
                OrderNumber AS 'SalesOrder', s.BOLNumber, o.OrderNumber, 
                c.SCAC, s.ProcessDateTime, ProNumber,
                s.DeliveryCharge, s.MasterTrackingID, o.TotalPackQty, 
                o.FreightCharge
            FROM 
                Starship.dbo.ShipmentOrder AS o
            LEFT OUTER JOIN 
                Starship.dbo.Shipment AS s ON s.InternalID = o.ShipmentID
            LEFT OUTER JOIN 
                Starship.dbo.ShipVia AS sv ON sv.InternalID = s.InternalID
            LEFT OUTER JOIN 
                Starship.dbo.Carrier AS c ON sv.SCAC = c.SCAC 
            WHERE
                OrderNumber = @SalesOrder;
    END
...