2009-07-31 16 views
0

SSISで「Execute SQL Task」を実行します 何らかの検証を行うストアドプロシージャを実行します ストアドプロシージャで何か問題が発生したときにRAISERRORコマンドがあります。 しかし、これをテストすると、このタスクは失敗しません。 私はこれについてgoogledしていると多くの参照を見つけましたが、私のために働く解決策はありません。 SQL Server 2005をService Pack 3にアップグレードしましたが、これは何の違いもありません。 1つの参照は、例外がスローされたときに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

私は似たようなことがありますが、うまく動作します。なぜそれがdoesntか分からない。私が持っているセットアップは、いろいろな場所で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 

は、あなたがそのコードブロックは、プロシージャの戻り値をチェックするに見舞われた場合伝えることができるはずを返すしようとする場合があります。

関連する問題