Как печатать переменную 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()"
Ответы
Ответ 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
Код >