Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Рекомендации по использованию try catch и @@error  [new]
Testor1
Member

Откуда:
Сообщений: 679
Всем привет!

Какие существуют рекомендации по использованию блока try catch или переменной @@error?
На сколько правильно во всех процедурах на обновление данных сразу же объявлять блок try catch?

Критика не нужна, нужен ваш опыт и аргументация (почему так, а не иначе).

CREATE PROCEDURE sp_test 
BEGIN 

        DECLARE @variables ..... ;
         
        BEGIN TRY 
         
           блок обновления данных
         
        END TRY 
        BEGIN CATCH 
        
          блок обработки ошибок            

        END CATCH

END 



[url=]http://msdn.microsoft.com/ru-ru/library/ms190193(v=sql.105).aspx[/url]
[url=]http://msdn.microsoft.com/ru-ru/library/ms179296(v=sql.105).aspx[/url]
14 окт 12, 11:42    [13315444]     Ответить | Цитировать Сообщить модератору
 Re: Рекомендации по использованию try catch и @@error  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Мой старческий маразм представляет себе картину:
- Любой вызов скуля делается через процедуры
- Их 100500
- В каждой прописана стандартная простыня

В итоге Copy&Past занимает 40%-80% кода.
Итог: Эпилепсия.

Если представить, что в основном процедуры только для оперативного (не интерфейсного) кода, т.е. далеко не 40% от всего кода модификации, то ладно, можно и постараться.

Ещё в дополнение к бубнению - клиентское приложение (аппликейшн сервер), взаимодействует со скулем через Proxy класс, в котором есть вся необходимая стандартная обработка ошибок. Он один, код нигде не повторяется, в нём сосредоточены все необходимые удобняшки для минимизации любой раздражающей мелочёвки, делая код максимально близким к бизнес логике.

@@Error - старый механизм работы с ошибками. TRY/CATCH пришёл ему на смену. Это базовое понимание и не зависит от языка программирования.
Использую в 2х местах:
RAISERROR(<bla-bla>);
RETURN @@Error; -- Только в процедурах; Для кошерности;

-- Чертовски редкая вещь, по пальцам одной руки
EXEC @RC = sys.sp_OA... ; IF (@RC != 0) GOTO OAErr; -- Со старыми вещами работать приходится по старому

Что касается вопроса - много обсуждалось на форуме. Так что кому не лень пусть вставит ссылки, особенно это касается ТС (топик стартера).

Testor1
DECLARE @variables ..... ;
Повеселило. Необходимая вещь в вопросе про TRY/CATCH. :)
14 окт 12, 17:29    [13315976]     Ответить | Цитировать Сообщить модератору
 Re: Рекомендации по использованию try catch и @@error  [new]
Testor1
Member

Откуда:
Сообщений: 679
Mnior
Мой старческий маразм представляет себе картину:
- Любой вызов скуля делается через процедуры
- Их 100500
- В каждой прописана стандартная простыня

В итоге Copy&Past занимает 40%-80% кода.
Итог: Эпилепсия.

Если представить, что в основном процедуры только для оперативного (не интерфейсного) кода, т.е. далеко не 40% от всего кода модификации, то ладно, можно и постараться.

Ещё в дополнение к бубнению - клиентское приложение (аппликейшн сервер), взаимодействует со скулем через Proxy класс, в котором есть вся необходимая стандартная обработка ошибок. Он один, код нигде не повторяется, в нём сосредоточены все необходимые удобняшки для минимизации любой раздражающей мелочёвки, делая код максимально близким к бизнес логике.

@@Error - старый механизм работы с ошибками. TRY/CATCH пришёл ему на смену. Это базовое понимание и не зависит от языка программирования.
Использую в 2х местах:
RAISERROR(<bla-bla>);
RETURN @@Error; -- Только в процедурах; Для кошерности;

-- Чертовски редкая вещь, по пальцам одной руки
EXEC @RC = sys.sp_OA... ; IF (@RC != 0) GOTO OAErr; -- Со старыми вещами работать приходится по старому

Что касается вопроса - много обсуждалось на форуме. Так что кому не лень пусть вставит ссылки, особенно это касается ТС (топик стартера).

Testor1
DECLARE @variables ..... ;
Повеселило. Необходимая вещь в вопросе про TRY/CATCH. :)


Использовать MVC и отказаться от процедур ?
14 окт 12, 19:14    [13316231]     Ответить | Цитировать Сообщить модератору
 Re: Рекомендации по использованию try catch и @@error  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31868
Mnior
В итоге Copy&Past занимает 40%-80% кода.
Итог: Эпилепсия.

Если представить, что в основном процедуры только для оперативного (не интерфейсного) кода, т.е. далеко не 40% от всего кода модификации, то ладно, можно и постараться.
У такого подхода есть важный недостаток - после возникновения ошибки продолжается выполнение процедуры, выполняются команды, которые по хорошему не должны выполняться...
Если я конечно вас правильно понял.
Mnior
Ещё в дополнение к бубнению - клиентское приложение (аппликейшн сервер), взаимодействует со скулем через Proxy класс, в котором есть вся необходимая стандартная обработка ошибок. Он один, код нигде не повторяется, в нём сосредоточены все необходимые удобняшки для минимизации любой раздражающей мелочёвки, делая код максимально близким к бизнес логике.
Это само собой, я не помню проектов за последние 20 лет без прослойки между СУБД и кодом приложения.
Это наверное все начинают делать после первого написанного приложения (если не считать микроприложения сроками на считанные недели).
Testor1
Использовать MVC и отказаться от процедур ?
Использование MVC и процедур не связаны друг с другом.
14 окт 12, 20:01    [13316335]     Ответить | Цитировать Сообщить модератору
 Re: Рекомендации по использованию try catch и @@error  [new]
Testor1
Member

Откуда:
Сообщений: 679
alexeyvg,

А можете порекомендовать источник для изучения как правильно проектировать крупные системы?
14 окт 12, 21:58    [13316560]     Ответить | Цитировать Сообщить модератору
 Re: Рекомендации по использованию try catch и @@error  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31868
Testor1
alexeyvg,

А можете порекомендовать источник для изучения как правильно проектировать крупные системы?
Ответил во второй вашей теме Анализ ошибок - trace + dump

Источника для изучения посоветовать не могу, может, вам спросить в "Разработка информационных систем" или в "Сертификация и обучение", может что то подскажут.
14 окт 12, 22:47    [13316749]     Ответить | Цитировать Сообщить модератору
 Re: Рекомендации по использованию try catch и @@error  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
alexeyvg
Если я конечно вас правильно понял.
В том смысле, что для для операций (основная, нагрузочная, важная, сложная часть бизнес логики), использование процедур предпочтительно и вся эта простыня контролирующего кода может быть соответствующей и весомой.
В остальном случае и процедур может не быть.
15 окт 12, 01:44    [13317458]     Ответить | Цитировать Сообщить модератору
 Re: Рекомендации по использованию try catch и @@error  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6723
Testor1
Использовать MVC и отказаться от процедур ?
Может вы ещё и имели ввиду Entity Framework?
Среди дибиеев такие апологеты почему-то практически не встречаются.
На этом форуме. Разве нет?
15 окт 12, 01:57    [13317496]     Ответить | Цитировать Сообщить модератору
 Re: Рекомендации по использованию try catch и @@error  [new]
Testor1
Member

Откуда:
Сообщений: 679
Mnior,

И все же

В каких случаях нужно использовать

try/catch и begin transaction/commit/rollback в триггерах и процедурах?

Кто-то может поделиться своим "богатым" опытом из реальной практики?
27 окт 12, 11:45    [13384496]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить