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

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

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

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

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

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

А, типа, когда блобы в сервер добавляли, должны были и медиа-проигрыватель для видосиков вставить?
...
Рейтинг: 0 / 0
Как получить JSON от ресурса средствами самого MS SQL Server
    #39842338
Фотография vikkiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SIMPLicity_..Если JSOn уж четыре года "как прикрутили", может и механизм появился...Работа с форматом JSON и взаимодействие с внешними системами - это концептуально довольно разные вещи.
...
Рейтинг: 0 / 0
Как получить JSON от ресурса средствами самого MS SQL Server
    #39842376
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SIMPLicity_Гавриленко Сергей АлексеевичОсвойте уже CLR. А еще лучше нормальную очередь поставьте.
Откуда это неугомонное желание именно из процедуры?...
Если JSOn уж четыре года "как прикрутили", может и механизм появился. А если механизм есть, то зачем изобретать велосипед?Хранение данных в формате money ещё раньше притулили, но курсы обмена из ЦБ сиквел получать не умеет. И карты из Гугла не умеет, хотя геоданные тоже добавили.
Всё таки обработка JSON, и импорт данных из интернета - разные вещи. Как минимум, это может быть в сиквельном средстве ETL (то есть в SSIS), но уж точно не в T-SQL
...
Рейтинг: 0 / 0
Как получить JSON от ресурса средствами самого MS SQL Server
    #39842386
andy st
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Как получить JSON от ресурса средствами самого MS SQL Server
    #39842418
Фотография SIMPLicity_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Как получить JSON от ресурса средствами самого MS SQL Server
    #39842419
Фотография SIMPLicity_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гавриленко Сергей АлексеевичSIMPLicity_,

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

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

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


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

Для функций CLR допустимы все типы данных, включая определяемые пользователем типы данных CLR, за исключением типов данных text, ntext, image, определяемых пользователем табличных типов и типов данных timestamp.
...
Рейтинг: 0 / 0
Как получить JSON от ресурса средствами самого MS SQL Server
    #39843756
Фотография SIMPLicity_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав Колосов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
Как получить JSON от ресурса средствами самого MS SQL Server
    #39843760
Фотография SIMPLicity_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Была идея сделать нечто красивое, НО...
Нашёл вот это: CLR для работы с контентом: HTTP Requests Using SQLCLR (by
Eilert Hjelmeseth, 2018-10-11)
.

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

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


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

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

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

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

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

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

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


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