>Почему Майкрософт упорно отказавается встроить >IntelliSence/AutoComplete для SQL?
Полностью поддерживаю. Очень животрепещущий вопрос.
Вопросы по методологии ошибок.
1) Ошибка уровня 16 прерывает пакет команд, но может и не прерывать.
Пример
BEGIN TRY
SELECT * FROM MyTable
--RAISERROR ('Error Sample',16,1)
END TRY
BEGIN CATCH
PRINT 'ERROR'
END CATCH
-----------------------------
Msg 208, Level 16, State 1, Line 2
Invalid object name 'MyTable'.
Не помогает SEH, на который возлагались большие надежды (в этом случае нужно изолировать проблемный код в ХП или выполнять его с помощью sp_executesql, чтобы прерывание пакета не завершилось).
Вот другой пример, когда SEH действительно отработала
BEGIN TRY
--SELECT * FROM MyTable
RAISERROR ('Error Sample',16,1)
END TRY
BEGIN CATCH
PRINT 'ERROR'
END CATCH
-----------------------------------
ERROR
2) Тоже самое с директивой XACT_ABORT. Транзакция не откатывается при ошибках времени компиляции.
По каким причинам ядро не может отловить ошибки времени исполнения, ведь насколько мне известно — T-SQL полностью интерпретируемый диалект? Более того изолированный пакет отрабатывает нормально в общем пакете (относительно ошибок)
Пример:
CREATE PROC SelectTable AS SELECT * FROM MyTable
GO
BEGIN TRY
EXEC SelectTable
END TRY
BEGIN CATCH
PRINT 'ERROR'
END CATCH
--------------------------------------
Msg 208, Level 16, State 1, Procedure SelectTable, Line 1
Invalid object name 'MyTable'.
ERROR
Вообще все сюрпризы обработки ошибок похоже перешли в новые версии

. Можете пояснить, почему так? Может быть я чего-то не заметил?
данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение