2009-07-31 3 views
0

SSIS에서 "Execute SQL Task"를 실행합니다. 일부 유효성 검사를 수행하는 저장 프로 시저를 실행합니다. 저장 프로 시저에 문제가 생겼을 때 RAISERROR 명령이 있습니다. 그러나이 작업을 테스트하면이 작업이 중단되지 않습니다. 나는 이것에 대해 봤 거든 참조 많이 발견하지만, 나를 위해 일하는 해결책은 없다. SQL Server 2005를 서비스 팩 3으로 업그레이드했지만 아무런 차이가 없습니다. 하나의 참조는 예외가 throw 될 때 PRINT 문을 넣을 것을 제안하지만, 작동하지 않습니다. 어떻게 해결할 수 있습니까? 저장 프로 시저의 코드는 다음과 같습니다.SSIS (SQL Server 2005) SQL 예외를 트래핑하지 않음

ALTER PROCEDURE [dbo].[usp_VAL_Journey] 
AS 
BEGIN 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 
    SET NOCOUNT ON; 

    DECLARE @Month AS INT 
        , @Year AS INT 
    SELECT TOP 1 @Year = DATEPART(YEAR, Date), @Month = DATEPART(MONTH, Date) 
      FROM dbo.JourneyLandingTable 

    SELECT TOP 1 * 
      FROM dbo.JourneyMasterTable 
      WHERE DATEPART(YEAR, Date) = @Year 
      AND DATEPART(MONTH, Date) = @Month 
    IF @@ROWCOUNT > 0 
    BEGIN 
      RAISERROR('JourneyMasterTable already contains data for this month.', 16, 1) 
      RETURN 
    END 

    SELECT DATEPART(YEAR, Date) AS year1, DATEPART(MONTH, Date) AS month1 
    FROM dbo.JourneyLandingTable 
    GROUP BY DATEPART(YEAR, Date), DATEPART(MONTH, Date) 

    IF @@ROWCOUNT > 1 
    BEGIN 
      RAISERROR('JourneyLandingTable contains data for more than 1 month.', 16, 1) 
    END 
END 

답변

0

나는 비슷한 것을 가지고 있지만 잘 작동합니다. 왜 그것이 나던 지 모르겠습니다. 내가 가지고있는 설정은 여러 곳에서 raiseerror를하지 않는다는 것입니다. 오류 수를 계속 증가시키고 마침내 다음과 같이 늘립니다. 그것은 완벽하게 작동합니다 - 그것은 실행과 모든 좋은 것들을 중단합니다.

declare @errorString varchar(100) 
IF @rc > 0 
BEGIN 
    set @errorString = 'Error(s) occured when trying to run sp_blahblah error count ' + cast(@rc as varchar(10)) 
    raiserror(@errorString , 16, 1) 
END 
0

일부 값 "RETURN N"

ALTER PROCEDURE [dbo].[usp_VAL_Journey] 
AS 
BEGIN 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 
    SET NOCOUNT ON; 

    DECLARE @Month AS INT 
        , @Year AS INT 
    SELECT TOP 1 @Year = DATEPART(YEAR, Date), @Month = DATEPART(MONTH, Date) 
      FROM dbo.JourneyLandingTable 

    SELECT TOP 1 * 
      FROM dbo.JourneyMasterTable 
      WHERE DATEPART(YEAR, Date) = @Year 
      AND DATEPART(MONTH, Date) = @Month 
    IF @@ROWCOUNT > 0 
    BEGIN 
      RAISERROR('JourneyMasterTable already contains data for this month.', 16, 1) 
      RETURN 10 --<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
    END 

    SELECT DATEPART(YEAR, Date) AS year1, DATEPART(MONTH, Date) AS month1 
    FROM dbo.JourneyLandingTable 
    GROUP BY DATEPART(YEAR, Date), DATEPART(MONTH, Date) 

    IF @@ROWCOUNT > 1 
    BEGIN 
      RAISERROR('JourneyLandingTable contains data for more than 1 month.', 16, 1) 
      RETURN 20 --<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
    END 
END 

당신이 그 코드 블록이 절차의 반환 값을 확인하여 충돌 된 경우 말할 수 있어야 반환하려고 할 수 있습니다.