sql >> データベース >  >> RDS >> Sqlserver

xmlns:dtを使用したOPENXML

    これを行うためにOPENXMLを使用する必要がある特別な理由はありますか? 2005年のXQUERYを使用すると、次のように簡単に情報を取得できます。

    declare @xmldata xml    
    set @xmldata = 
    '<data xmlns="http://www.aaa.com/master_browse_response" xmlns:dt="http://www.aaa.com/DataTypes">
      <products>
        <product>
          <product_id>121403</product_id>
          <countries>
            <dt:country>GBR</dt:country>
            <dt:country>USA</dt:country>
          </countries>
        </product>
      </products>
    </data>'
    
    ;WITH XMLNAMESPACES 
    (
        DEFAULT 'http://www.aaa.com/master_browse_response',
        'http://www.aaa.com/DataTypes' as dt
    )
    SELECT  x.c.value('(../../product_id)[1]', 'varchar(100)') as product_id,
            x.c.value('(.)[1]', 'varchar(100)') as country
    FROM @xmldata.nodes('/data/products/product/countries/dt:country') x(c)
    

    新しいXQUERY機能は、問題を解決するためのはるかに優れた選択肢です。

    編集:OPENXMLを使用した同じソリューションは次のようになります:

    declare @xmldata xml    
    set @xmldata = 
    '<data xmlns="http://www.aaa.com/master_browse_response" xmlns:dt="http://www.aaa.com/DataTypes">
      <products>
        <product>
          <product_id>121403</product_id>
          <countries>
            <dt:country>GBR</dt:country>
            <dt:country>USA</dt:country>
          </countries>
        </product>
      </products>
    </data>'
    
    DECLARE @hDoc int, @rootxmlns varchar(100)
    SET @rootxmlns = '<root xmlns:hm="http://www.aaa.com/master_browse_response" xmlns:dt="http://www.aaa.com/DataTypes"/>'
    EXEC sp_xml_preparedocument @hDoc OUTPUT, @xmldata, @rootxmlns
    
    SELECT *
    FROM OPENXML(@hDoc, '//hm:product/hm:countries/dt:country',2)
            WITH(Country    varchar(100) '.',
                 Product_ID varchar(100) '../../hm:product_id')
    
    EXEC sp_xml_removedocument @hDoc
    


    1. SQLServerの文字列またはバイナリデータは切り捨てられます

    2. psycopg2のインストール中にエラーが発生しました。-lsslのライブラリが見つかりません

    3. CSVファイルをSQLiteテーブルにインポートする

    4. SELECTINTOOUTFILEを使用してMySQLErrcode13を回避するにはどうすればよいですか?