Как напечатать переменную DateTime в методе RAISERROR? - PullRequest
27 голосов
/ 31 мая 2011

Моя хранимая процедура принимает два параметра @EffectiveStartDate DATETIME
@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 ()»

Ответы [ 2 ]

28 голосов
/ 31 мая 2011

Предоставленное значение должно быть константой или переменной. Вы не можете указать имя функции в качестве значения параметра. (из 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);
0 голосов
/ 12 февраля 2017

Просто пытаюсь помочь, вот еще один пример.Я поместил это в утверждение BEGIN CATCH после моей BEGIN TRY.

Примечание. Это очень похоже на использование оператора 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
...