Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Топик располагается на нескольких страницах: [1] 2 вперед Ctrl→ все |
jsmirnoww Member Откуда: Москва Сообщений: 132 |
есть процедураcreate PROCEDURE [dbo].[zz_LoadXMLFromFile] @tcFileName VARCHAR(4000), @xml_output xml OUTPUT AS BEGIN SET NOCOUNT ON; DECLARE @Obj int DECLARE @Result int DECLARE @HTTPStatus int EXEC @Result = sp_OACreate 'MSXML2.XMLHttp', @Obj OUT EXEC @Result = sp_OAMethod @Obj, 'open', NULL, 'GET', @tcFileName, false EXEC @Result = sp_OAMethod @Obj, 'setRequestHeader', NULL, 'Content-Type', 'application/x-www-form-urlencoded' EXEC @Result = sp_OAMethod @Obj, send, NULL, '' EXEC @Result = sp_OAGetProperty @Obj, 'status', @HTTPStatus OUT declare @Tab table (x xml) insert into @tab EXEC @Result = sp_OAGetProperty @Obj, 'responseXML.xml'-- ,@XML output set @xml_output = (Select x from @tab) END и скрипт для вызова: declare @xml_String xml declare @url varchar(250) SET NOCOUNT ON; select @url = '...' exec zz_LoadXMLFromFile @url, @xml_String output select @xml_String если запускаю скрипт из mssms то всё отрабатывает хорошо и возвращает xml на ~103Kb если этот же скрипт заворачиваю в JOB, то получаю ошибку:
Хелп, плз, весь мозг сломал уже. надо, что бы работало из JOB'a Сообщение было отредактировано: 14 фев 17, 14:27 |
||
10 янв 12, 15:28 [11879447] Ответить | Цитировать Сообщить модератору |
jsmirnoww Member Откуда: Москва Сообщений: 132 |
вылетает на втором sp_OAGetProperty: EXEC @Result = sp_OAGetProperty @Obj, 'responseXML.xml' |
10 янв 12, 15:30 [11879479] Ответить | Цитировать Сообщить модератору |
jsmirnoww Member Откуда: Москва Сообщений: 132 |
могу в личку кинуть урл для опытов. |
10 янв 12, 15:50 [11879679] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31783 |
Соответственно, нужно посмотреть, что в @tab, может, там нет никакого XML-я? |
||
10 янв 12, 16:00 [11879791] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
Т.е. это сообщение об ошибке такое - "Вылетаю на втором !" ? Полученное через sp_OAGetErrorInfo ? |
||
10 янв 12, 16:01 [11879797] Ответить | Цитировать Сообщить модератору |
jsmirnoww Member Откуда: Москва Сообщений: 132 |
наверное для прикола. это не мой код.
если запускать из mssms, то на выходе получаю XML, следовательно @tab заполняется и всё работает. если этот же скрипт вставить как шаг JOB'a, то вылетает с ошибкой
в процедуре два раза вызывается sp_OAGetErrorInfo. ошибка возникает именно на втором. если его закомментировать, то ошибки не возникает, но и результата я тоже не получаю. есть подозрение, что xml обрезается и становится не валидным. но почему при запуске процедуры из JOB'a??? |
||||||||||
10 янв 12, 16:13 [11879926] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
Да что вы говорите ! И вы даже получили результаты этих вызовов ?
Т.е. вы настаиваете, что оригинальный текст ошибки все же "Вылетаю на втором" ? |
||||
10 янв 12, 16:22 [11880011] Ответить | Цитировать Сообщить модератору |
jsmirnoww Member Откуда: Москва Сообщений: 132 |
опечатался: два раза вызывается sp_OAGetProperty. и причиной ошибки является второй вызов.
текст ошибки был приведён в первом сообщении:
|
||||||||||
10 янв 12, 16:35 [11880137] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
Где обработка ошибки вызова sp_OAGetProperty ? |
||||
10 янв 12, 16:47 [11880239] Ответить | Цитировать Сообщить модератору |
jsmirnoww Member Откуда: Москва Сообщений: 132 |
Зачем она Вам? Я номер и текст сообщения об ошибке вижу в логе выполнения job'a. |
||
10 янв 12, 16:54 [11880288] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
И вы так уверены, что это ошибка вызова sp_OAGetProperty ? |
||
10 янв 12, 17:30 [11880527] Ответить | Цитировать Сообщить модератору |
jsmirnoww Member Откуда: Москва Сообщений: 132 |
оформил второй вызов этой процедуры так:begin try insert into @tab EXEC @Result = sp_OAGetProperty @Obj, 'responseXML.xml'-- ,@XML output end try begin catch declare @err VARCHAR(4000) SELECT @err= 'ERROR_NUMBER: '+convert(varchar(4000),ERROR_NUMBER()) +' ERROR_SEVERITY: '+convert(varchar(4000),ERROR_SEVERITY()) +' ERROR_STATE: '+convert(varchar(4000),ERROR_STATE()) +' ERROR_PROCEDURE: '+convert(varchar(4000),ERROR_PROCEDURE()) +' ERROR_LINE: '+convert(varchar(4000),ERROR_LINE()) +' ERROR_MESSAGE: '+ERROR_MESSAGE() print @err end catch при срабатывании обработчика исключения возвращается текст
пробовал табличную переменну заменить на временну таблицу - результат тот же обработчик сработал при вызове из JOB'a и не сработал при вызове из mssms. можно в этом случае сказать, что проблема локализована и причиной ошибки является именно этот вызов? ... убрал insert into #tab - ошибки нет!!! в чём причина? |
||
10 янв 12, 18:07 [11880753] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
В том, что вы полагаете читаемое вами содержимое валидным XML-ем. А оно вовсе не валидный XML. |
||
10 янв 12, 18:09 [11880766] Ответить | Цитировать Сообщить модератору |
jsmirnoww Member Откуда: Москва Сообщений: 132 |
загонял этот xml в 2 валидатора - ошибок не было. заменил тип данных во временной таблице с XML на VARCHAR(max) - ошибка та же самая почему процедура без проблем отрабатывает при вызове из mssms? |
||||
10 янв 12, 18:21 [11880815] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
"Этот xml" - это какой ? Который вы прочитали из sp_OAGetProperty ? Или который скачали отдельно, другими средствами ? |
||
10 янв 12, 18:23 [11880830] Ответить | Цитировать Сообщить модератору |
WarAnt Member Откуда: Питер Сообщений: 2423 |
jsmirnoww, дюже вы упёртый однако, вам же нцать раз намекнули, что тайна вашей беды хранится в результатах работы sp_OAGetErrorInfo, а вы упорно топчетесь на месте придумывая все новые способы как интереснее это место истоптать.:)) |
10 янв 12, 18:24 [11880834] Ответить | Цитировать Сообщить модератору |
jsmirnoww Member Откуда: Москва Сообщений: 132 |
который получал sp_OAGetProperty @Obj, 'responseXML.xml', запуская из mssms |
||||
10 янв 12, 18:31 [11880868] Ответить | Цитировать Сообщить модератору |
jsmirnoww Member Откуда: Москва Сообщений: 132 |
вывел @Result после каждого вызова sp_OAGetProperty и sp_OAMethod, везде 0 вызвал sp_OAGetErrorInfo после каждого вызова sp_OAGetProperty и sp_OAMethod - всё выполняется без ошибок, а результат плачевный. нашел вот что: 1. если вызвать EXEC @Result = sp_OAGetProperty @Obj, 'responseXML.xml'без insert into перед ним, в возвращенном наборе данных XML обрывается на 64Кб 2. если использовать конструкцию: create table #tab (x NVARCHAR(max)) insert into #tab EXEC @Result = sp_OAGetProperty @Obj, 'responseXML.xml'--,@XML output select * from #tab, то выходной xml тоже обрывается на 64Кб 3. а в этих двух случаях: create table #tab (x xml) insert into #tab EXEC @Result = sp_OAGetProperty @Obj, 'responseXML.xml'--,@XML output select * from #tab и declare @xml_output xml create table #tab (x NVARCHAR(max)) insert into #tab EXEC @Result = sp_OAGetProperty @Obj, 'responseXML.xml'--,@XML output Select @xml_output=x from #tab select @xml_output выводится необрезанный, валидный xml - 103Кб. 64Кб - это ограничение MSXML2.XMLHttp? (пробовал 3 и 6 версии - результат тот же) как они превращаются в 103Кб? при конвертации в тип XML пустые теги <teg></teg> сокращаются до <teg /> - т.е. размер должен уменьшаться мозг разрушен. почему так? и как это связано с вызовом из JOB'a? я понимаю, что топчусь на месте. дайте мне пинка в нужном направлении, плз. |
||
11 янв 12, 10:24 [11883111] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31783 |
|
||||||
11 янв 12, 10:46 [11883232] Ответить | Цитировать Сообщить модератору |
jsmirnoww Member Откуда: Москва Сообщений: 132 |
он таким становится после преобразования к типу xml. если вывести результат как nvarchar(max), то получим 64Кб
нет это из ssms |
||||||||
11 янв 12, 11:07 [11883360] Ответить | Цитировать Сообщить модератору |
Slava_Nik Member Откуда: из России Сообщений: 892 |
jsmirnoww, помню была такая же проблема, то что шло обрезание данных вот как решил не помню и и не нашел :( если не ошибаюсь надо работать с nvarchar(max) и соединять данные. |
11 янв 12, 11:18 [11883453] Ответить | Цитировать Сообщить модератору |
jsmirnoww Member Откуда: Москва Сообщений: 132 |
а что с чем соединять? насколько я понимаю приведение к нормальному виду происходит в момент преобразования к типу xml и только при вызове из ssms. из job'a же этого не происходит. я не понимаю природу этих преобразований, поэтому и "топчусь на месте". может подскажете статейку какую-нибудь на эту тему. или другой способ, которым можно получить ответ от http сервера? |
||
11 янв 12, 13:06 [11884374] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
Надо полагать, что вы в sms и агент в job-е работают под разными логинами |
||
11 янв 12, 13:15 [11884468] Ответить | Цитировать Сообщить модератору |
jsmirnoww Member Откуда: Москва Сообщений: 132 |
да. какая настройка пользователя на это влияет? |
||||
11 янв 12, 13:20 [11884529] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
это может влиять на политики windows. Поскольку вы доступаетесь в внешнему ресурсу Вы мониторили траффик туда и обратно для обеих вызовов ? |
||
11 янв 12, 13:25 [11884613] Ответить | Цитировать Сообщить модератору |
Топик располагается на нескольких страницах: [1] 2 вперед Ctrl→ все |
Все форумы / Microsoft SQL Server | ![]() |