Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как получить JSON от ресурса средствами самого MS SQL Server / 19 сообщений из 19, страница 1 из 1
28.07.2019, 15:35
    #39842312
SIMPLicity_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить JSON от ресурса средствами самого MS SQL Server
Подскажите, пожалуйста, научился ли MSSQL Server самостоятельно получать JSON от ресурса? Если да, то где почитать.

Суть вопроса: хочу попробовать исключительно средствами MS SQL Server работать со внешним ресурсом посредством JSON (http|https, авторизация либо в заголовке либо в теле запросов). Ну что бы в процедуре можно было отправлять json-запрос на внешний ресурс и ловить ответ ответ и обрабатывать его...

Если кому-то удалось, напишите, пожалуйста, простенький пример.

Тут 7485552 читал (но у поста на днях десятилетний юбилей), а это мне как-то не помогло :(

Заранее спасибо!

--------------------------
No ROM Basic...
...
Рейтинг: 0 / 0
28.07.2019, 16:01
    #39842316
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить JSON от ресурса средствами самого MS SQL Server
Освойте уже CLR. А еще лучше нормальную очередь поставьте.
Откуда это неугомонное желание именно из процедуры?...
...
Рейтинг: 0 / 0
28.07.2019, 18:13
    #39842326
SIMPLicity_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить JSON от ресурса средствами самого MS SQL Server
Гавриленко Сергей АлексеевичОсвойте уже CLR. А еще лучше нормальную очередь поставьте.
Откуда это неугомонное желание именно из процедуры?...
Если JSOn уж четыре года "как прикрутили", может и механизм появился. А если механизм есть, то зачем изобретать велосипед?
...
Рейтинг: 0 / 0
28.07.2019, 18:48
    #39842330
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить JSON от ресурса средствами самого MS SQL Server
SIMPLicity_,

А, типа, когда блобы в сервер добавляли, должны были и медиа-проигрыватель для видосиков вставить?
...
Рейтинг: 0 / 0
28.07.2019, 19:59
    #39842338
vikkiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить JSON от ресурса средствами самого MS SQL Server
SIMPLicity_..Если JSOn уж четыре года "как прикрутили", может и механизм появился...Работа с форматом JSON и взаимодействие с внешними системами - это концептуально довольно разные вещи.
...
Рейтинг: 0 / 0
29.07.2019, 00:13
    #39842376
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить JSON от ресурса средствами самого MS SQL Server
SIMPLicity_Гавриленко Сергей АлексеевичОсвойте уже CLR. А еще лучше нормальную очередь поставьте.
Откуда это неугомонное желание именно из процедуры?...
Если JSOn уж четыре года "как прикрутили", может и механизм появился. А если механизм есть, то зачем изобретать велосипед?Хранение данных в формате money ещё раньше притулили, но курсы обмена из ЦБ сиквел получать не умеет. И карты из Гугла не умеет, хотя геоданные тоже добавили.
Всё таки обработка JSON, и импорт данных из интернета - разные вещи. Как минимум, это может быть в сиквельном средстве ETL (то есть в SSIS), но уж точно не в T-SQL
...
Рейтинг: 0 / 0
29.07.2019, 05:54
    #39842386
andy st
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить JSON от ресурса средствами самого MS SQL Server
SIMPLicity_,
без авторизации - как-то так
авторизация - отдельный глум, зависимый от источника данных
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
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
...
Рейтинг: 0 / 0
29.07.2019, 09:46
    #39842418
SIMPLicity_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить JSON от ресурса средствами самого MS SQL Server
andy stSIMPLicity_,
без авторизации - как-то так
авторизация - отдельный глум, зависимый от источника данных
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
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



Спасибо большое! Похожее видел. "Взял на карандашик" как вариант.
...
Рейтинг: 0 / 0
29.07.2019, 09:47
    #39842419
SIMPLicity_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить JSON от ресурса средствами самого MS SQL Server
Гавриленко Сергей АлексеевичSIMPLicity_,

А, типа, когда блобы в сервер добавляли, должны были и медиа-проигрыватель для видосиков вставить?
Так ведь сделали. Ну, не в прямом смысле слова, но...
...
Рейтинг: 0 / 0
31.07.2019, 18:36
    #39843668
SIMPLicity_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить JSON от ресурса средствами самого MS SQL Server
Гавриленко Сергей АлексеевичОсвойте уже CLR. А еще лучше нормальную очередь поставьте.
Откуда это неугомонное желание именно из процедуры?...
Длина ПЕРЕДАВАЕМОЙ в CLR строки - 8000 байт (8000 символов для varchar и 4000 для Nvarchar).
CLR может возвращать в качестве результата (return) только int32 (код возврата).
Это для C# и MSSQL2017E ...
---------------------------------------
Итог: всё равно приходится фигачиться с таблицами
...
Рейтинг: 0 / 0
01.08.2019, 01:10
    #39843752
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить JSON от ресурса средствами самого MS SQL Server
SIMPLicity_,

В курсе, что через sp_OACreate можно винт отформатировать? Никогда не включайте на корпоративном сервере OLE.
...
Рейтинг: 0 / 0
01.08.2019, 01:17
    #39843753
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить JSON от ресурса средствами самого MS SQL Server
SIMPLicity_,

авторCLR может возвращать в качестве результата (return) только int32 (код возврата)
Вы это насочиняли.
...
Рейтинг: 0 / 0
01.08.2019, 01:25
    #39843754
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить JSON от ресурса средствами самого MS SQL Server
SIMPLicity_Длина ПЕРЕДАВАЕМОЙ в CLR строки - 8000 байт (8000 символов для varchar и 4000 для Nvarchar).


Об этом тоже насочиняли.

Для функций CLR допустимы все типы данных, включая определяемые пользователем типы данных CLR, за исключением типов данных text, ntext, image, определяемых пользователем табличных типов и типов данных timestamp.
...
Рейтинг: 0 / 0
01.08.2019, 01:50
    #39843756
SIMPLicity_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить JSON от ресурса средствами самого MS SQL Server
Владислав КолосовSIMPLicity_,

авторCLR может возвращать в качестве результата ( return ) только int32 (код возврата)
Вы это насочиняли.
Где насочинял?

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 (последний).

Насчёт функции,- да, там можно (вероятно) хоть что угодно.
...
Рейтинг: 0 / 0
01.08.2019, 02:33
    #39843760
SIMPLicity_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить JSON от ресурса средствами самого MS SQL Server
Была идея сделать нечто красивое, НО...
Нашёл вот это: CLR для работы с контентом: HTTP Requests Using SQLCLR (by
Eilert Hjelmeseth, 2018-10-11)
.

Не всё сразу, но работает вроде.

Если кому интересно - могу попробовать как-нибудь накатать перевод и обзор.
Перекомпилировать dll пока не стал,- возможно, со временем перековыряю кусок под себя. Если будут у кого-то существенные правки и замечания,- пишите, пожалуйста, сюда. На всякий случай - ClrHttpRequest.zip (ссылка на оригинал - на оригинальной странице).
...
Рейтинг: 0 / 0
01.08.2019, 02:42
    #39843761
SIMPLicity_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить JSON от ресурса средствами самого MS SQL Server
Владислав КолосовSIMPLicity_Длина ПЕРЕДАВАЕМОЙ в CLR строки - 8000 байт (8000 символов для varchar и 4000 для Nvarchar).


Об этом тоже насочиняли.

Для функций CLR допустимы все типы данных, включая определяемые пользователем типы данных CLR, за исключением типов данных text, ntext, image, определяемых пользователем табличных типов и типов данных timestamp.
Ухты!
Честно использовал SqlString. Больше 8000 байт передать в CLR не смог.
...
Рейтинг: 0 / 0
01.08.2019, 07:48
    #39843797
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить JSON от ресурса средствами самого MS SQL Server
SIMPLicity_Ухты!
Честно использовал SqlString. Больше 8000 байт передать в CLR не смог.
Вот, в доке написано:

Handling Large Object (LOB) Parameters in the CLRUse SqlBytes and SqlChars to pass large object (LOB) binary type (varbinary(max)) and LOB character type (nvarchar(max)) parameters, respectively. These types allow streaming the LOB values from the database to the common language runtime (CLR) routine, instead of copying the entire value into managed space. SqlBinary and SqlString should be used only for small binary and character string values.

Кроме того, SqlChars сиквел передаёт и возвращает быстрее, чем SqlString, поэтому лучше использовать его в любом случае, если только не предполагается сложной обработки строк.
...
Рейтинг: 0 / 0
01.08.2019, 12:06
    #39843989
Владислав Колосов
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить JSON от ресурса средствами самого MS SQL Server
SIMPLicity_,

А почему вы используете процедуры там, где лучше использовать функции?
Например, можно легко организовать массовую обработку набора данных, используя выражение SELECT вместо цикла и результат этой обработки возвращать в таблицу. При этом режим безопасности будет SAFE, т.к. не придется выполнять подключение к серверу.

Решений, при которых _нельзя_ использовать CLR функции не так уж и много.
...
Рейтинг: 0 / 0
01.08.2019, 20:53
    #39844321
SIMPLicity_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как получить JSON от ресурса средствами самого MS SQL Server
Владислав КолосовSIMPLicity_,

А почему вы используете процедуры там, где лучше использовать функции?
Например, можно легко организовать массовую обработку набора данных, используя выражение SELECT вместо цикла и результат этой обработки возвращать в таблицу. При этом режим безопасности будет SAFE, т.к. не придется выполнять подключение к серверу.

Решений, при которых _нельзя_ использовать CLR функции не так уж и много.

Я образумился, господин судья! Больше так не буду!
См. выше на три поста ,- пока буду пользоваться найденным решением. Потом допилю. Нагрузка пока небольшая,- будет работать неспешно и надёжно...
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как получить JSON от ресурса средствами самого MS SQL Server / 19 сообщений из 19, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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