在url中包含xml文件:
<response>
<sum>0</sum>
<result>0</result>
<comment>sel*1.9488|buy*1.9453</comment>
</response>
现在需要存储过程,我可以从url解析此xml文件并更新为<comment>sel*1.9488|buy*1.9453</comment>
想要添加购买* 1.9453 到我的表中的列值。怎么做?
答案 0 :(得分:12)
要从URL获取XML,您需要执行以下操作:
sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'Ole Automation Procedures', 1;
GO
RECONFIGURE;
GO
然后从URL获取XML(基于来自here的更新版本的答案),下面创建一个临时表来存储该值,以便您可以使用xpath和子字符串处理结果。
这是一个使用google maps xml的工作示例,您需要更新url和xpath以满足您的特定要求。
USE tempdb
GO
IF OBJECT_ID('tempdb..#xml') IS NOT NULL DROP TABLE #xml
CREATE TABLE #xml ( yourXML XML )
GO
DECLARE @URL VARCHAR(8000)
DECLARE @QS varchar(50)
-- & or ? depending if there are other query strings
-- Use this for when there is other query strings:
SELECT @QS = '&date='+convert(varchar(25),getdate(),126)
-- Use this for when there is NO other query strings:
-- SELECT @QS = '?date='+convert(varchar(25),getdate(),126)
SELECT @URL = 'http://maps.google.com/maps/api/geocode/xml?latlng=10.247087,-65.598409&sensor=false' + @QS
DECLARE @Response varchar(8000)
DECLARE @XML xml
DECLARE @Obj int
DECLARE @Result int
DECLARE @HTTPStatus int
DECLARE @ErrorMsg varchar(MAX)
EXEC @Result = sp_OACreate 'MSXML2.XMLHttp', @Obj OUT
EXEC @Result = sp_OAMethod @Obj, 'open', NULL, 'GET', @URL, false
EXEC @Result = sp_OAMethod @Obj, 'setRequestHeader', NULL, 'Content-Type', 'application/x-www-form-urlencoded'
EXEC @Result = sp_OAMethod @Obj, send, NULL, ''
EXEC @Result = sp_OAGetProperty @Obj, 'status', @HTTPStatus OUT
INSERT #xml ( yourXML )
EXEC @Result = sp_OAGetProperty @Obj, 'responseXML.xml'--, @Response OUT
SELECT yourXML.value('(//GeocodeResponse/status)[1]','VARCHAR(MAX)') from #xml
为了插入子字符串,你需要做这样的事情来返回管道之后的所有内容并添加到你的表中:
INSERT tableDestination (valueDestination)
SELECT substring(yourXML.value('(//response/comment)[1]','VARCHAR(MAX)'),charindex('|',yourXML.value('(//response/comment)[1]','VARCHAR(MAX)'),1)+1,len(yourXML.value('(//response/comment)','VARCHAR(MAX)'))) from #xml
答案 1 :(得分:2)
有些像
那样DECLARE @xml XML =
'<response>
<sum>0</sum>
<result>0</result>
<comment>sel*1.9488|buy*1.9453</comment>
</response>'
SELECT @xml.value('(//response/comment)[1]','VARCHAR(MAX)')
来自value() Method (xml Data Type)
对XML执行XQuery并返回SQL类型的值。 此方法返回标量值。
您通常使用此方法从XML实例中提取值 存储在xml类型的列,参数或变量中。就这样,你 可以指定将XML数据与数据组合或比较的SELECT查询 在非XML列中。