sql >> Databáze >  >> RDS >> Sqlserver

Vyberte data ze souboru XML jako tabulku v 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 )

Vyrábí:

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

Poznámka:[1] je potřeba k označení, že chcete vybrat první hodnotu sekvence, protože dotaz může vrátit více než jednu odpovídající hodnotu na řádek (představte si, že váš XML obsahuje několik FilterID na SpangemansFilter).

Myslel jsem, že je to užitečné vědět, a tak jsem na Googlu prohledal a přečetl mnoho příspěvků, dokud jsem nenašel tohle.

AKTUALIZACE Načtení ze souboru:

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

VYBERTE @xmlData



  1. Je problém s vlastnostmi entit JPA, Oracle 10g a kalendáře?

  2. Možnosti formátování SQLcl (Oracle)

  3. Jak provedu uloženou proceduru v úloze SQL Agent?

  4. Jak vytvořit počítaný sloupec v tabulce SQL Server 2008