Re: Вопросы для Григория Погульского \ SQL Server \ SDE/T \
От: Аноним  
Дата: 05.03.05 03:41
Оценка:
>Почему Майкрософт упорно отказавается встроить >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

Вообще все сюрпризы обработки ошибок похоже перешли в новые версии . Можете пояснить, почему так? Может быть я чего-то не заметил?

С уважением, Александр Гаас

Томское сообщество .NET программистов

Мой blog


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.