2014-09-11 31 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) 
相关问题