Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
NordRus Member Откуда: Сообщений: 47 |
Добрый день! Имеем: работоспособное подключение от MSSQL к MySQL через Linked Server и ODBC. При выполнении запроса иногда возникают ошибки на стороне MySQL. Пытаюсь получить текст ошибки: Begin Try exec('EXECUTE (''Drop temporary table if exists t'') At ' + @aLinkedServer); End Try Begin Catch Set @LogMsg = error_message(); ... Проблема: при любых ошибках MySQL в @LogMsg я имею только одно сообщение: Could not execute statement on remote server 'LinkedServer'. Вопрос: как мне вытащить в @LogMsg текст ошибки, который возвращает ODBC? Дайте направление - куда копать, пожалуйста. |
19 апр 17, 21:57 [20416641] Ответить | Цитировать Сообщить модератору |
Гавриленко Сергей Алексеевич Member Откуда: Moscow Сообщений: 37155 |
Сервер уже почти 20 лет не умеет ловить ничего, кроме первой ошибки. |
20 апр 17, 01:48 [20416968] Ответить | Цитировать Сообщить модератору |
NordRus Member Откуда: Сообщений: 47 |
Как-то очень категорично. TOAD же выводит мне в окне Messages сообщение ODBC, и следующей строкой ошибку MSSQL. Значит, технически возможно получить сообщение ODBC. Только надо найти способ. Что-то я пока не нашёл. Плохо ищу? |
20 апр 17, 09:06 [20417270] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31783 |
Это же их обработчик ловит ошибки при работе с линкед-сервером. |
||
20 апр 17, 13:31 [20418596] Ответить | Цитировать Сообщить модератору |
NordRus Member Откуда: Сообщений: 47 |
ОК, только TOAD - не детище Microsoft, и то, что программисты Quest смогли организовать получение от MSSQL в свой интерфейс сообщения ODBC после ошибки означает, что задача решаема. |
20 апр 17, 14:04 [20418762] Ответить | Цитировать Сообщить модератору |
Гавриленко Сергей Алексеевич Member Откуда: Moscow Сообщений: 37155 |
|
||
20 апр 17, 14:09 [20418793] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31783 |
Или при выполнении именно этого кода в TOAD в переменную @LogMsg записываются оба сообщения об ошибке? |
||
20 апр 17, 15:22 [20419175] Ответить | Цитировать Сообщить модератору |
Noskov Member Откуда: Москва Сообщений: 394 |
Если эту ошибку сгенерировал именно MySQL, а не ODBC - её текст можно вытащить выполнив:exec('show warnings') at LinkedMySQL или exec('show errors') at LinkedMySQL |
20 апр 17, 16:01 [20419393] Ответить | Цитировать Сообщить модератору |
NordRus Member Откуда: Сообщений: 47 |
Noskov, работает, спасибо! Возвращает ошибку ODBC. Однако ещё вопрос до кучи: как мне грамотно обработать возвращаемый результат? Функция возвращает набор из трёх полей. Чтобы использовать их, я пытаюсь поместить результат во временную таблицу: ... End Try Begin Catch Declare @t Table(l binary(100), c numeric(10, 0), m binary(1000)); Insert Into @t Execute ('show errors') at MySQL; End Catch; Получаю ошибку: Error:20.04.2017 21:12:18 0:00:00.758: Lookup Error - SQL Server Database Error: The operation could not be performed because OLE DB provider "MSDASQL" for linked server "MySQL" was unable to begin a distributed transaction. |
20 апр 17, 21:17 [20420274] Ответить | Цитировать Сообщить модератору |
NordRus Member Откуда: Сообщений: 47 |
Отвечу сам себе: решение найдено. Вот оно:End Try Begin Catch Declare @t Table(l binary(100), c numeric(10, 0), m binary(1000)); Select @SQL = 'Select * From openquery(LinkedMySQL, ''show errors'')'; Insert Into @t Exec(@sql); Select Convert(varchar(1000), m) From @t; End Catch;Возвращает ошибку ODBC. |
20 апр 17, 21:41 [20420334] Ответить | Цитировать Сообщить модератору |
NordRus Member Откуда: Сообщений: 47 |
Или проще:End Try Begin Catch Declare @t Table(l Varchar(20), c int, m varchar(500)); Insert Into @t Exec('Select * From openquery(' + @aLinkedServer + ', ''show errors'')'); Select l,c,m From @t; End Catch; |
20 апр 17, 22:14 [20420416] Ответить | Цитировать Сообщить модератору |
Гавриленко Сергей Алексеевич Member Откуда: Moscow Сообщений: 37155 |
|
||
21 апр 17, 02:01 [20420661] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |