web-dev-qa-db-ja.com

RAISERRORメソッドでDateTime変数を出力する方法は?

ストアドプロシージャは2つのパラメータを受け入れます@EffectiveStartDateDATETIME
@ EffectiveEndDate DATETIME

私は次のように検証コードを書きました:

IF(@EffectiveStartDate > @EffectiveEndDate)
        BEGIN
            RAISERROR ('SPName: InsertUpdateLiquidityDateRule:  Start Date: %s cannot  be greater than End Date %s',11,1,CAST(@EffectiveStartDate AS varchar(30)),CAST(@EffectiveEndDate AS varchar(30)));
            RETURN -1
        END 

ここで何が間違っているのかわかりますか。

SProcのコンパイル中に、「CAST()の近くの構文が正しくありません」というメッセージが表示されました。

28
vinayvasyani

指定する値は定数または変数である必要があります。関数名をパラメーター値として指定することはできません。 (MSDNから ストアドプロシージャの実行 )。

あなたはこのようなことをする必要があります:

declare @EffectiveStartDateText varchar(30)
set @EffectiveStartDateText = cast(@EffectiveStartDate as varchar)

declare @EffectiveEndDateText varchar(30)
set @EffectiveEndDateText = cast(@EffectiveEndDate as varchar)

RAISERROR (
    'SPName: InsertUpdateLiquidityDateRule:  Start Date: %s cannot  be greater than End Date %s',
    11,
    1,
    @EffectiveStartDateText,
    @EffectiveEndDateText);
29
Alex Aza

手伝おうとしているだけで、ここに別の例があります。 BEGINTRYの後にこれをBEGINCATCHステートメントに入れました。

注:これは、ifステートメントの使用と非常によく似ています。

BEGIN TRY
--Do something.
END TRY 

BEGIN CATCH
    --Else on error do this.
    PRINT 'Problem found!!! ' 

    -- Whoops, there was an error
    -- Raise an error with the details of the exception
    DECLARE @ErrMsg nvarchar(4000), 
            @ErrSeverity int, 
            @ErrLineNum int

    SELECT @ErrMsg = ERROR_MESSAGE(), 
           @ErrSeverity = ERROR_SEVERITY(), 
           @ErrLineNum = ERROR_LINE()

    RAISERROR(@ErrMsg, @ErrSeverity, 1, @ErrLineNum)

END CATCH
0
Chris Singleton