Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Как перехватить такую ошибку
|
|||
|---|---|---|---|
|
#18+
Я вызываю в хр. процедуре, хр. процедуру на другом сервере. Синтаксис примерно такой: exec INSQLREMOTE.Runtime.dbo.GetWideData ...параметры... Если удаленный сервер MSSQL выключен, то в QA появляется следующая ошибка: Server: Msg 17, Level 16, State 1, Line 1 SQL Server does not exist or access denied. Как мне перехватить такую ошибку , чтобы ее обработать в хр. процедуре? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2001, 11:35 |
|
||
|
Как перехватить такую ошибку
|
|||
|---|---|---|---|
|
#18+
select @@error после кода, который может вызвать ошибку ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2001, 11:46 |
|
||
|
Как перехватить такую ошибку
|
|||
|---|---|---|---|
|
#18+
Все таки у меня не получается. 1. Рассмотрим такой пример: CREATE PROCEDURE [dbo].[test] AS DECLARE @MYERR int SET @MYERR = 0 CREATE TABLE #aaa ([id] int not null) INSERT INTO #aaa SELECT * FROM tttt SET @MYERR = @@ERROR IF @MYERR <> 0 BEGIN PRINT 'ERROR IN TEST' PRINT CONVERT(varchar,@MYERR) END GO Причем таблицы tttt заведомо не сущестует. Запускаем - PRINT не отрабатывает. Создаем вторую процедуру: CREATE PROCEDURE [dbo].[test1] AS DECLARE @MYERR int SET @MYERR = 0 EXEC test SET @MYERR = @@ERROR IF @MYERR <> 0 BEGIN PRINT 'ERROR IN TEST1' PRINT CONVERT(varchar,@MYERR) END GO Запускаем: поймали ошибку. Результат в QA: Server: Msg 208, Level 16, State 1, Procedure test, Line 8 Invalid object name 'tttt'. ERROR IN TEST1 208 Почему работает так? 2. И даже если это единственный вариант, то у меня не получается отловить именно эту ошибку: Server: Msg 17, Level 16, State 1, Line 1 SQL Server does not exist or access denied. Которая возникает при работе с Linked Server, если удаленный сервер выключен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.06.2001, 17:02 |
|
||
|
Как перехватить такую ошибку
|
|||
|---|---|---|---|
|
#18+
На мой взгляд, такую ошибку не прехватишь, особенно в первой процедуре, т.к. сервер считает что дальнейшее выполнение при такой ошибке не возможно и прерывает выполнение batch-блока, так что до SET @MYERR = @@ERROR дело просто не доходит. Можно конечно поэксперементировать с флагами трассировки, но вряд-ли. Так что ловить придется средствами клиента. Вот. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2001, 02:56 |
|
||
|
Как перехватить такую ошибку
|
|||
|---|---|---|---|
|
#18+
Интересно, а какой вообще принцып (когда прерывать выполнение, когда нет)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2001, 06:51 |
|
||
|
Как перехватить такую ошибку
|
|||
|---|---|---|---|
|
#18+
Собственно, это не ошибка сервера. Это то же самое, когда Вы с клиента пытаетесь "достучаться" до сервера. В принципе, через свой обработчик ошибок я могу увидеть, что это ошибка Net-Library:Connection timeout ... c соответствующим кодом. Но это к слову... Думаю, что если Вы хотите знать, стоит ли выполнять ХП, правильным было бы узнать состояние удалённого сервера. Хотя бы так: DECLARE @object int DECLARE @hr int DECLARE @property varchar(255), @print int DECLARE @return varchar(255) -- Create an object EXEC @hr = sp_OACreate 'SQLDMO.SQLServer', @object OUT IF @hr <> 0 BEGIN EXEC sp_displayoaerrorinfo @object, @hr RETURN END -- Set a property EXEC @hr = sp_OASetProperty @object, 'Name', 'REMOTESERVER' IF @hr <> 0 BEGIN EXEC sp_displayoaerrorinfo @object, @hr RETURN END -- Get a property EXEC @hr = sp_OAGetProperty @object, 'Status', @print OUT IF @hr <> 0 BEGIN EXEC sp_displayoaerrorinfo @object, @hr RETURN END SELECT @print EXEC @hr = sp_OADestroy @object М.б. можно иначе? Если @print=1 то - Running. Правда это не гарантия, что уд.сервер "откликнется". Он ведь может и "в себя" уйти. Ещё одно замечание для приведённого скрипта - Ваш сервер должен обладать соответствующими правами, т.е. стартовать под local account, имеющим права доступа к services на уд. сервере. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2001, 17:18 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32007013&tid=1826563]: |
0ms |
get settings: |
8ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
31ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
66ms |
get tp. blocked users: |
2ms |
| others: | 215ms |
| total: | 359ms |

| 0 / 0 |
