Я использую SQL Server 2008, и когда я запускаю это выражение в студии управления, оператор Select в Catch Block выполняется как ожидалось
BEGIN TRY
INSERT INTO IDontExist(ProductID)
VALUES(1)
END TRY
BEGIN CATCH
SELECT 'There was an error! ' + ERROR_MESSAGE()
END CATCH
Однако, когда я запускаю этот оператор, оператор в Catch Block никогда не выполняется, и вместо этого ошибка отображается только на вкладке результатов
BEGIN TRY
Select * from IDontExist
END TRY
BEGIN CATCH
SELECT 'There was an error! ' + ERROR_MESSAGE()
END CATCH
Они оба возвращают один и тот же номер ошибки '208' 'Invalid Object Name: IDontExist', поэтому зачем обрабатывать его, а другой нет?