powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как перехватить такую ошибку
6 сообщений из 6, страница 1 из 1
Как перехватить такую ошибку
    #32006984
Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я вызываю в хр. процедуре, хр. процедуру на другом сервере.

Синтаксис примерно такой:

exec INSQLREMOTE.Runtime.dbo.GetWideData ...параметры...

Если удаленный сервер MSSQL выключен, то в QA появляется следующая ошибка:

Server: Msg 17, Level 16, State 1, Line 1
SQL Server does not exist or access denied.

Как мне перехватить такую ошибку , чтобы ее обработать в хр. процедуре?
...
Рейтинг: 0 / 0
Как перехватить такую ошибку
    #32006986
GreenSunrise
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
select @@error
после кода, который может вызвать ошибку
...
Рейтинг: 0 / 0
Как перехватить такую ошибку
    #32007005
Александр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все таки у меня не получается.

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, если удаленный сервер выключен.
...
Рейтинг: 0 / 0
Как перехватить такую ошибку
    #32007009
Фотография AndyMandy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На мой взгляд, такую ошибку не прехватишь, особенно в первой процедуре, т.к. сервер считает что дальнейшее выполнение при такой ошибке не возможно и прерывает выполнение batch-блока, так что до SET @MYERR = @@ERROR дело просто не доходит. Можно конечно поэксперементировать с флагами трассировки, но вряд-ли. Так что ловить придется средствами клиента. Вот.
...
Рейтинг: 0 / 0
Как перехватить такую ошибку
    #32007013
Stas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Интересно, а какой вообще принцып (когда прерывать выполнение, когда нет)?
...
Рейтинг: 0 / 0
Как перехватить такую ошибку
    #32007089
Fompro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Собственно, это не ошибка сервера. Это то же самое, когда Вы с клиента пытаетесь "достучаться" до сервера. В принципе, через свой обработчик ошибок я могу увидеть, что это ошибка 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 на уд. сервере.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как перехватить такую ошибку
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]