#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. Это очень широкая тема, и вы даже не сказали, по какому пути вы хотите пойти. Ваша любимая поисковая система будет вашим другом здесь.