2014-09-11 32 views
-2
ALTER TRIGGER [dbo].[DEL_RouteStops_CatalogID] 
    ON [dbo].[RouteStops] 
    AFTER DELETE 
AS 
BEGIN 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 
    SET NOCOUNT ON; 


    DECLARE @rowcount int 
    DECLARE @rowsexist bit 

    SET @rowcount = (SELECT COUNT(a.RouteStopID) FROM RouteStops a, deleted d WHERE a.StopCIXID = d.StopCIXID) 


    IF (@rowcount > 0) 
    BEGIN 
    SET @rowsexist = 'true' 

**SUPPOSEDLY THE BELOW LINE RETURNS MORE THAN 1 RESULT?!** 
    IF @rowsexist = 'true' 
    BEGIN 

    UPDATE LocationCatalog 
    SET NextSubmitDate = (SELECT MIN(a.UD5) FROM RouteStops a, deleted d where a.StopCIXID IN (d.StopCIXID)) 
    FROM RouteStops a, LocationCatalog b, deleted d 
    WHERE b.RouteStopID = d.RouteStopID 

    UPDATE LocationCatalog 
    SET SubmitDay = (SELECT a.Route FROM RouteStops WHERE UD5 = (SELECT MIN(a.UD5) FROM RouteStops a, deleted d where a.StopCIXID = d.StopCIXID)), 
     NextPickDate = (SELECT dateadd(D, a.UD2, b.NextSubmitDate) FROM RouteStops a, deleted d where a.StopCIXID IN (d.StopCIXID)), 
     NextDeliveryDate = (SELECT dateadd(D, a.UD3, b.NextSubmitDate) FROM RouteStops a, deleted d where a.StopCIXID IN (d.StopCIXID)) 
    FROM RouteStops a, LocationCatalog b, deleted d 
    WHERE b.RouteStopID = d.RouteStopID 

    END 

END 
END 
+0

我看不到問題。 – Bulat 2014-09-11 10:05:39

+0

不是*應該*。它確實如此,SQL Server不會查看查詢,並且*認爲它將返回多行。它執行它,它**實際上**返回多行。你需要通過子查詢並找出哪一個能夠解決這個問題。 – 2014-09-11 10:06:59

+0

此外,你可能會重寫這個,根本不使用子查詢。您仍然需要刪除重複項目,但「RouteStops」可能是罪魁禍首 - 或者結果可能不是您想要的。但是,你沒有提供足夠的信息來幫助你。 – 2014-09-11 11:54:37

回答

1

我將開始更多的通過查看子查詢使用分配NextPickDateNextDeliveryDate 是有可能,這些返回多行?

這些子查詢需要檢查出:

SELECT dateadd(D, a.UD2, b.NextSubmitDate) 
FROM RouteStops a, deleted d where a.StopCIXID IN (d.StopCIXID) 

SELECT dateadd(D, a.UD3, b.NextSubmitDate) 
FROM RouteStops a, deleted d where a.StopCIXID IN (d.StopCIXID) 

您可以嘗試使用適當的聚合操作,確保子查詢只返回一行;例如:

SELECT min(dateadd(D, a.UD2, b.NextSubmitDate)) 
FROM RouteStops a, deleted d where a.StopCIXID IN (d.StopCIXID)