Если я выполняю следующий запрос
EXEC spFoo
PRINT 'TEST'
и spFoo
выдает ошибку, он все равно выполняет оператор печати.
Однако, если я делаю
BEGIN TRY
EXEC cdb.spFoo
PRINT 'TEST'
END TRY
BEGIN CATCH
THROW;
END CATCH
Он ведет себя так, как я ожидал, и не продолжает работать после ошибки.
Может кто-нибудь объяснить мне это поведение?Это все еще продолжается, даже если я включу его в транзакцию.Это не только с печатным заявлением, но и с любой другой вещью.Сначала я думал, что это проблема серьезности, но серьезность была 16-го уровня. Это нормальное поведение T-SQL?Если это так, что мотивирует этот дизайн, который противоречит любому другому языку, с которым я когда-либо работал, который напрямую увеличивает ошибку?
Я пробовал и видел такое же поведение в SQL Server 2012, 2014 и 2017 на нескольких разных машинах.Рассматриваемая хранимая процедура связана с SQL CLR.