Я использую блок try-catch в T-SQL, и я хочу только уловить определенный номер ошибки. В других случаях я использую RAISERROR() как re-throw бедных, чтобы возвращать информацию об ошибке в приложение.Невозможно использовать вызовы функций в качестве параметров для RAISERROR()
Когда я пытаюсь следующее, я получаю ошибку "Неправильный синтаксис около 'error_message'" ошибка:
raiserror
(
error_message()
,1
,1
)
Ниже, однако, работает отлично:
declare @err varchar(100)
set @err = error_message()
raiserror
(
@err
,1
,1
)
Я думал, что это может быть типажей причуда, так что я попробовал это, но это также дало синтаксическую ошибку:
raiserror
(
cast(error_message() as varchar(100))
,1
,1
)
что происходит Вот? Почему я должен хранить результат ERROR_MESSAGE() в переменной перед тем, как использовать его как параметр для RAISERROR(), вместо прямого вызова функции?
ли это просто вопрос синтаксического анализа. Если вы ожидаете, что SQL будет «реальным» языком программирования, вы обретете мир скорби. – Stu
Я второй, что говорит Стю. Более прямым ответом может быть «SQL - очень очень старый язык и, следовательно, это, в основном, мусор». Я попросил изменить это поведение: https://connect.microsoft.com/SQLServer/feedback/details/352110/t-sql-use-scalar-functions-as-stored-procedure-parameters#details, но рядом с ним нет надеюсь, что это действительно произойдет. – jamiet