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

XMLファイルからデータをTSQLのテーブルとして選択

    set @xmlData='<?xml version="1.0"?>
    <ArrayOfSpangemansFilter xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <SpangemansFilter>
    <FilterID>1219</FilterID>
    <Name>Fred</Name>
    <Code>510</Code>
    <Department>N</Department>
    <Number>305327</Number>
    </SpangemansFilter>
    <SpangemansFilter>
    <FilterID>3578</FilterID>
    <Name>Gary</Name>
    <Code>001</Code>
    <Department>B</Department>
    <Number>0692690</Number>
    </SpangemansFilter>
    <SpangemansFilter>
    <FilterID>3579</FilterID>
    <Name>George</Name>
    <Code>001</Code>
    <Department>X</Department>
    <Number>35933</Number>
    </SpangemansFilter>
    </ArrayOfSpangemansFilter>'
    
    
    SELECT 
      ref.value('FilterID[1]', 'int') AS FilterID ,
      ref.value('Name[1]', 'NVARCHAR (10)') AS Name ,
      ref.value('Code[1]', 'NVARCHAR (10)') AS Code ,
      ref.value('Department[1]', 'NVARCHAR (3)') AS Department,
      ref.value('Number[1]', 'int') AS Number      
    FROM @xmlData.nodes('/ArrayOfSpangemansFilter/SpangemansFilter') 
    xmlData( ref )
    

    プロデュース:

    FilterID    Name       Code       Department Number
    ----------- ---------- ---------- ---------- -----------
    1219        Fred       510        N          305327
    3578        Gary       001        B          692690
    3579        George     001        X          35933
    

    注:[1] クエリは行ごとに複数の一致する値を返す可能性があるため、シーケンスの最初の値を選択することを示すために必要です (XML に SpangemansFilter ごとに複数の FilterID が含まれていると想像してください)。

    これは知っておくと便利だと思ったので、 これ

    更新 ファイルからロードするには:

    DECLARE @xmlData XML
    SET @xmlData = (
      SELECT * FROM OPENROWSET (
        BULK 'C:\yourfile.xml', SINGLE_CLOB
      ) AS xmlData
    )
    

    SELECT @xmlData



    1. ローカルサーバーとリモートサーバーでのネットワークTTFB時間が長い

    2. sqlite:合計時間を追加する方法hh:mm:ssここで、列のデータ型はDATETIMEですか?

    3. 結合と順序のある個別のレコード

    4. 空のクラスター化テーブルへのINSERT…SELECTによる最小限のロギング