У меня есть хранимая процедура, которая запускается при изменении статуса заказа на продажу. Процедура вставляет строку в таблицу, используя в качестве ключа номер заказа на продажу.
Моя проблема в том, что мне нужно остановить выполнение процедуры во второй (или третий) раз, если кто-то вернется и по какой-то причине изменяет заказ на продажу. Я пробовал несколько разных вещей, но ничего не помогло. Вот мой последний код, использующий 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