Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
SIMPLicity_ Member Откуда: (((@))) Сообщений: 8823 |
Подскажите, пожалуйста, научился ли MSSQL Server самостоятельно получать JSON от ресурса? Если да, то где почитать. Суть вопроса: хочу попробовать исключительно средствами MS SQL Server работать со внешним ресурсом посредством JSON (http|https, авторизация либо в заголовке либо в теле запросов). Ну что бы в процедуре можно было отправлять json-запрос на внешний ресурс и ловить ответ ответ и обрабатывать его... Если кому-то удалось, напишите, пожалуйста, простенький пример. Тут 7485552 читал (но у поста на днях десятилетний юбилей), а это мне как-то не помогло :( Заранее спасибо! -------------------------- No ROM Basic... |
28 июл 19, 15:35 [21936230] Ответить | Цитировать Сообщить модератору |
Гавриленко Сергей Алексеевич Member Откуда: Moscow Сообщений: 37155 |
Освойте уже CLR. А еще лучше нормальную очередь поставьте. Откуда это неугомонное желание именно из процедуры?... |
28 июл 19, 16:01 [21936242] Ответить | Цитировать Сообщить модератору |
SIMPLicity_ Member Откуда: (((@))) Сообщений: 8823 |
Если JSOn уж четыре года "как прикрутили", может и механизм появился. А если механизм есть, то зачем изобретать велосипед? |
||
28 июл 19, 18:13 [21936286] Ответить | Цитировать Сообщить модератору |
Гавриленко Сергей Алексеевич Member Откуда: Moscow Сообщений: 37155 |
SIMPLicity_, А, типа, когда блобы в сервер добавляли, должны были и медиа-проигрыватель для видосиков вставить? |
28 июл 19, 18:48 [21936299] Ответить | Цитировать Сообщить модератору |
vikkiv Member Откуда: EU Сообщений: 2921 |
|
||
28 июл 19, 19:59 [21936321] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31783 |
Всё таки обработка JSON, и импорт данных из интернета - разные вещи. Как минимум, это может быть в сиквельном средстве ETL (то есть в SSIS), но уж точно не в T-SQL |
||||
29 июл 19, 00:13 [21936492] Ответить | Цитировать Сообщить модератору |
andy st Member Откуда: Сообщений: 806 |
SIMPLicity_, без авторизации - как-то так авторизация - отдельный глум, зависимый от источника данных declare @obj int, @ret int, @json varchar(max), @url varchar(max) set @url = 'http://...' exec @ret = sp_OACreate 'MSXML2.ServerXMLHTTP', @obj out IF @ret <> 0 exec sp_OAGetErrorInfo @obj exec @ret = sp_OAMethod @obj, 'Open', null, 'GET', @url, 'false' if @ret <> 0 exec sp_OAGetErrorInfo @obj exec @ret = sp_OAMethod @obj, 'setRequestHeader', null, 'Content-Type', 'text/xml; charset=utf-8' if @ret <> 0 exec sp_OAGetErrorInfo @obj exec @ret = sp_OAMethod @obj, 'setOption', null, 2 ,13056 -- игнорировать сертификат if @ret <> 0 exec sp_OAGetErrorInfo @obj EXEC @ret = sp_OAMethod @obj, 'SEND' if @ret <> 0 exec sp_OAGetErrorInfo @obj declare @httpresult table (http varchar(max)) insert @httpresult EXEC @ret = sp_OAGetProperty @obj, 'responsetext' IF @ret<>0 EXEC sp_OAGetErrorInfo @obj SELECT @json = http from @httpresult select @json EXEC @ret = sp_OADestroy @obj |
29 июл 19, 05:54 [21936538] Ответить | Цитировать Сообщить модератору |
SIMPLicity_ Member Откуда: (((@))) Сообщений: 8823 |
Спасибо большое! Похожее видел. "Взял на карандашик" как вариант. |
||
29 июл 19, 09:46 [21936596] Ответить | Цитировать Сообщить модератору |
SIMPLicity_ Member Откуда: (((@))) Сообщений: 8823 |
Так ведь сделали. Ну, не в прямом смысле слова, но... |
||
29 июл 19, 09:47 [21936597] Ответить | Цитировать Сообщить модератору |
SIMPLicity_ Member Откуда: (((@))) Сообщений: 8823 |
Длина ПЕРЕДАВАЕМОЙ в CLR строки - 8000 байт (8000 символов для varchar и 4000 для Nvarchar). CLR может возвращать в качестве результата (return) только int32 (код возврата). Это для C# и MSSQL2017E ... --------------------------------------- Итог: всё равно приходится фигачиться с таблицами ![]() |
||
31 июл 19, 18:36 [21939228] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8350 |
SIMPLicity_, В курсе, что через sp_OACreate можно винт отформатировать? Никогда не включайте на корпоративном сервере OLE. |
1 авг 19, 01:10 [21939378] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8350 |
SIMPLicity_,
Вы это насочиняли. |
||
1 авг 19, 01:17 [21939379] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8350 |
Об этом тоже насочиняли.
|
||||
1 авг 19, 01:25 [21939380] Ответить | Цитировать Сообщить модератору |
SIMPLicity_ Member Откуда: (((@))) Сообщений: 8823 |
Где насочинял? C# : ... public static string GetFromSite(SqlString connectionString) { //string string_ = connectionString.ToString(); //connectionString = string_.ToString().Length.ToString() + " > " +connectionString.ToString().ToLower(); return connectionString; // string string_ = connectionString.ToString(); // return connectionString.ToString().Length * -1 ; } ... Компилирую для FW 4.0 Регистрирую assembly. Строю процедуру и получаю отлуп: Ошибка CREATE PROCEDURE: процедура среды CLR может определяться только для методов, возвращающих один из следующих типов: , SqlInt32, System.Int32, System.Nullable<System.Int32>, void. MSSQL2017 Express (последний). Насчёт функции,- да, там можно (вероятно) хоть что угодно. |
||||
1 авг 19, 01:50 [21939382] Ответить | Цитировать Сообщить модератору |
SIMPLicity_ Member Откуда: (((@))) Сообщений: 8823 |
Была идея сделать нечто красивое, НО... Нашёл вот это: CLR для работы с контентом: HTTP Requests Using SQLCLR (by Eilert Hjelmeseth, 2018-10-11). Не всё сразу, но работает вроде. Если кому интересно - могу попробовать как-нибудь накатать перевод и обзор. Перекомпилировать dll пока не стал,- возможно, со временем перековыряю кусок под себя. Если будут у кого-то существенные правки и замечания,- пишите, пожалуйста, сюда. На всякий случай - ClrHttpRequest.zip (ссылка на оригинал - на оригинальной странице). |
1 авг 19, 02:33 [21939386] Ответить | Цитировать Сообщить модератору |
SIMPLicity_ Member Откуда: (((@))) Сообщений: 8823 |
Ухты! Честно использовал SqlString. Больше 8000 байт передать в CLR не смог. ![]() |
||||||
1 авг 19, 02:42 [21939387] Ответить | Цитировать Сообщить модератору |
alexeyvg Member Откуда: Moscow Сообщений: 31783 |
Кроме того, SqlChars сиквел передаёт и возвращает быстрее, чем SqlString, поэтому лучше использовать его в любом случае, если только не предполагается сложной обработки строк. |
||||
1 авг 19, 07:48 [21939432] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8350 |
SIMPLicity_, А почему вы используете процедуры там, где лучше использовать функции? Например, можно легко организовать массовую обработку набора данных, используя выражение SELECT вместо цикла и результат этой обработки возвращать в таблицу. При этом режим безопасности будет SAFE, т.к. не придется выполнять подключение к серверу. Решений, при которых _нельзя_ использовать CLR функции не так уж и много. |
1 авг 19, 12:06 [21939712] Ответить | Цитировать Сообщить модератору |
SIMPLicity_ Member Откуда: (((@))) Сообщений: 8823 |
Я образумился, господин судья! Больше так не буду! ![]() См. выше на три поста ,- пока буду пользоваться найденным решением. Потом допилю. Нагрузка пока небольшая,- будет работать неспешно и надёжно... |
||
1 авг 19, 20:53 [21940192] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |