【发布时间】:2016-09-22 07:09:13
【问题描述】:
有什么方法可以直接获取第 3 方 Web 服务 XML 数据并将其存储到 SQL Server DB 中?
我知道还有很多其他简单的解决方案,例如 Rest 或 WCF,但就我而言,我想向 SQL 添加新的作业,每天都会触发并从 Web 服务获取数据。
【问题讨论】:
标签: sql sql-server web-services stored-procedures
有什么方法可以直接获取第 3 方 Web 服务 XML 数据并将其存储到 SQL Server DB 中?
我知道还有很多其他简单的解决方案,例如 Rest 或 WCF,但就我而言,我想向 SQL 添加新的作业,每天都会触发并从 Web 服务获取数据。
【问题讨论】:
标签: sql sql-server web-services stored-procedures
要连接到一些资源并获得 XML 响应,您可以使用以下代码:
DECLARE @URI nvarchar(max) = 'http://example.com/',
@methodName nvarchar(50) ='GET',
@objectID int,
@setTimeouts nvarchar(255) = 'setTimeouts(9000,90000,900000,9000000)'
EXEC sp_OACreate 'MSXML2.XMLHTTP', @ObjectID OUT
EXEC sp_OAMethod @objectID, 'open', null, @methodName, @URI, 'false'
EXEC sp_OAMethod @objectID, @setTimeouts
EXEC sp_OAMethod @objectID, 'send', null
INSERT INTO SomeTable (xmlResponse)
EXEC sp_OAGetProperty @objectID, 'responseText'
EXEC sp_OAGetErrorInfo @objectID
EXEC sp_OADestroy @objectID
您可以评论@setTimeouts部分,如果响应时间可能很大,则需要。
把它放在存储过程中。将@URI 作为参数传递,这将在SomeTable 中写入响应。然后您可以将EXEC YourStoredProv @URI 放入工作并安排每天的发布。
编辑
授权:
DECLARE @URI nvarchar(max) = 'http://example.com/',
@auth nvarchar(max),
@methodName nvarchar(50),
@objectID int,
@setTimeouts nvarchar(255) = 'setTimeouts(9000,90000,900000,9000000)'
EXEC sp_OACreate 'MSXML2.XMLHTTP', @ObjectID OUT
SELECT @auth= @URI + 'AppEngine_2/api_login?user_name=myuserName&password=myPassword%20&TOKEN=chinaurl&CLIENT_TYPE=1%22',
@methodName='POST'
EXEC sp_OAMethod @objectID, 'open', null, @methodName, @auth, 'false'
EXEC sp_OAMethod @objectID, 'send', null
SELECT @methodName='GET'
EXEC sp_OAMethod @objectID, 'open', null, @methodName, @URI, 'false'
EXEC sp_OAMethod @objectID, @setTimeouts
EXEC sp_OAMethod @objectID, 'send', null
INSERT INTO SomeTable (xmlResponse)
EXEC sp_OAGetProperty @objectID, 'responseText'
EXEC sp_OAGetErrorInfo @objectID
EXEC sp_OADestroy @objectID
您可以将myuserName、myPassword 和TOKEN 作为变量作为URL 来获取响应。
【讨论】: