복붙노트

[SQL] 어떻게 T-SQL을 사용하여 URL에서 XML을 읽을 수 있습니까?

SQL

어떻게 T-SQL을 사용하여 URL에서 XML을 읽을 수 있습니까?

URL에서 XML 파일을 가지고 :

<response>
<sum>0</sum>
<result>0</result>
<comment>sel*1.9488|buy*1.9453</comment>
</response>

지금은에 열을 값으로 URL 및 업데이트에서이 XML 파일을 구문 분석 할 수있는 저장 프로 시저를 원하는 <주석> SEL * 1.9488 | 구매 * 1.9453 추가 구매 * 1.9453 내 테이블을합니다. 어떻게합니까?

해결법

  1. ==============================

    1.당신이 다음을 수행해야 URL에서 XML을 얻으려면 :

    당신이 다음을 수행해야 URL에서 XML을 얻으려면 :

    OLE 자동화 절차 사용

    sp_configure 'show advanced options', 1;
    GO
    RECONFIGURE;
    GO
    sp_configure 'Ole Automation Procedures', 1;
    GO
    RECONFIGURE;
    GO
    

    그런 다음 URL에서 XML (여기에서 업데이트 된 버전을 기반으로 대답을) 얻을, 다음은 다음 XPath와 문자열을 사용하여 결과를 처리 할 수 ​​있도록 값을 저장하기 위해 임시 테이블을 생성합니다.

    이것은 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
    
  2. ==============================

    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)')
    

    값에서 () 메서드 (XML 데이터 형식)

  3. from https://stackoverflow.com/questions/18054652/how-can-i-to-read-a-xml-from-a-url-using-t-sql by cc-by-sa and MIT license