Подтвердить что ты не робот

Как печатать переменную DateTime в методе RAISERROR?

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

4b9b3361

Ответ 1

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

Ответ 2

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

Примечание. Это очень похоже на использование оператора if.

<Код > НАЧАТЬ ПОПРОБУЙТЕ --Сделай что-нибудь. END TRY

НАЧИНАЙТЕСЬ - Повторяйте ошибку, сделайте это. PRINT 'найдена проблема!!! '   - Упс, произошла ошибка   - Поднять ошибку с подробностями исключения   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 Код >