Вызов API Из SQL Server — Проблема С Размером Ответа

#sql-server #api #get #response #limit

#sql-сервер #API #получить #ответ #предел

Вопрос:

Я вызываю (GET) API с SQL Server и сохраняю результаты в JSON. Мой рабочий код выглядит следующим образом:

 DECLARE @Object AS Int; DECLARE @hr INT DECLARE @json AS TABLE(Json_Table nvarchar(max)) declare @username varchar(50), @password varchar(50), @encoded_base64 varchar(max), @auth varchar(max) declare @source varbinary(max)  set @username = 'demousername' set @password = 'demopassword' SET @source = CONVERT(varbinary(max), @username   ':'   @password) SET @encoded_base64 = CAST(N'' AS xml).value('xs:base64Binary(sql:variable("@source"))', 'varchar(max)') SET @auth = 'Basic '   @encoded_base64  Exec @hr=sp_OACreate 'MSXML2.ServerXMLHTTP.6.0', @Object OUT; IF @hr lt;gt; 0 EXEC sp_OAGetErrorInfo @Object Exec @hr=sp_OAMethod @Object, 'open', NULL, 'get',  'http://demourl',  'false' IF @hr lt;gt; 0 EXEC sp_OAGetErrorInfo @Object EXEC @hr = sp_OAMethod @Object, 'setRequestHeader', NULL, 'Authorization', @auth; IF @hr lt;gt; 0 EXEC sp_OAGetErrorInfo @Object Exec @hr=sp_OAMethod @Object, 'send' IF @hr lt;gt; 0 EXEC sp_OAGetErrorInfo @Object Exec @hr=sp_OAMethod @Object, 'responseText', @json OUTPUT IF @hr lt;gt; 0 EXEC sp_OAGetErrorInfo @Object  INSERT into @json (Json_Table) exec sp_OAGetProperty @Object, 'responseText' select * from @json SELECT * FROM OPENJSON((select * from @json), N'$.data') WITH (   [Column1] nvarchar(max) N'$.column1.id' ) EXEC sp_OADestroy @Object  

Проблема в том, что мой API возвращает большой объем данных (около 4 МБ при сохранении результатов в файле на диске вручную), и SQL Server выдает мне следующую ошибку:

 Json_Table ----------------------------------------------------------------------------------------- Response size 1164KB has exceeded maximum supported size 1024KB. However, the output is still available to subsequent steps in the workflow.  

Тем не менее, мой код работает нормально без каких-либо проблем, если у меня меньше данных.

Пожалуйста, помогите мне устранить эту ошибку и двигаться дальше. Заранее спасибо.

P. S Мне нужно использовать вышеупомянутую методологию (т. Е. Использовать SQL для вызова моего API) в обязательном порядке, поэтому используйте любой другой инструмент, такой как VS, SSIS и т. Д. это не поможет.

Комментарии:

1. Просто не надо… Эти старые процедуры OA предназначены для совместимости со старыми базами данных; например, с действительно старыми базами данных (SQL Server 2000). В идеале, чтобы действительно использовать API, вы должны использовать процесс для передачи данных на SQL Server. В противном случае, если вы «должны» сделать это на уровне SQL, создайте для этого свои собственные объекты CLR. Не полагайтесь на те объекты, которые не видели никаких обновлений в течение большей части 2 десятилетий. С тех пор интернет продвинулся дальше.

2. @Larnu спасибо за ваш быстрый ответ, но есть ли какое-либо решение моей проблемы в пределах границ, которые я упомянул?

3. Как я уже сказал, просто не используйте эти процедуры. Сейчас уже не 2001 год.

4. @Larnu тогда, как вы предлагали ранее, не могли бы вы предоставить мне примеры одного или нескольких, чтобы я мог пойти по тому же пути?

5. Это очень широкая тема, и вы даже не сказали, по какому пути вы хотите пойти. Ваша любимая поисковая система будет вашим другом здесь.