Я новичок и пытаюсь получить данные из службы SOAP с помощью SQL-запроса. Сначала я попробовал это на reqbin.com, получил ответ, все работает нормально (см. рисунок). С SQL я не получаю никаких данных. Есть ли у кого-нибудь идеи, как улучшить SQL?
DECLARE @xmlRequest NVARCHAR(MAX) =
'<soapenv:Envelope xmlns:soapenv = "http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Body>
<StatusNespolehlivyPlatceRequest xmlns = "http://adis.mfcr.cz/rozhraniCRPDPH/">
<dic>27396819</dic>
</StatusNespolehlivyPlatceRequest>
</soapenv:Body>
</soapenv:Envelope>';
DECLARE @response INT;
DECLARE @responseText NVARCHAR(MAX);
EXEC sp_OACreate 'MSXML2.ServerXMLHTTP', @response OUT;
EXEC sp_OAMethod @response, 'open', NULL, 'POST', 'https://adisrws.mfcr.cz/dpr/axis2/services/rozhraniCRPDPH.rozhraniCRPDPHSOAP', 'false';
EXEC sp_OAMethod @response, 'setRequestHeader', NULL, 'Content-Type', 'text/xml; charset=utf-8';
EXEC sp_OAMethod @response, 'send', NULL, @xmlRequest;
EXEC sp_OAMethod @response, 'responseText', @responseText OUT;
-- Debugging: Print the raw response
PRINT @responseText;
Большое спасибо за любой совет!!
MS SQL Studio, я думаю, версия 19.x
Здравствуйте, я бы порекомендовал вам использовать SQL для запросов к базе данных. А для работы с веб-сервисом выберите обычный язык программирования (c#, java и т.д.).
Подобные задачи не являются задачами T-SQL. Объекты OA предназначены для совместимости с древними экземплярами SQL Server (мы говорим о SQL Server 2000). Если вам нужно работать с такими вещами, используйте промежуточное программное обеспечение для взаимодействия как с API, так и с экземпляром SQL Server. То, что вы используете, полностью зависит от вас; PowerShell, SSIS, C#, PHP, Python и т. д. и т. п. Существует множество значительно лучших вариантов.
sp_oa-procedures не поддерживает nvarchar(max)
в качестве параметров. Попробуйте NVARCHAR(4000)
для @xmlRequest/@responseText.
Кроме того, не стесняйтесь вообще не использовать процедуры sp_oa, они не рекомендуются, вам следует либо вызывать веб-службы из-за пределов SQL Server, либо использовать для этого CLR или более подходящий код.
Вы можете получить ответ nvarchar(max) с помощью INSERT .. EXEC sp_OAGetProperty
. См. stackoverflow.com/questions/53086558/…
Какие СУБД вы используете? (Приведенный выше код на самом деле не является общим SQL.)