sql >> Databasteknik >  >> RDS >> Sqlserver

Välj data från XML-filen som tabell i 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 )

Producerar:

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

Obs:[1] behövs för att indikera att du vill välja det första värdet i sekvensen eftersom frågan kan returnera mer än ett matchat värde per rad (föreställ dig att din XML innehåller flera FilterIDs per SpangemansFilter).

Jag tyckte att detta var användbart att veta, så jag googlade och läste många inlägg tills jag hittade den här.

UPPDATERA För att ladda från fil:

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

VÄLJ @xmlData



  1. MySQL dynamisk pivot

  2. Dynamiskt kolumnnamn i MYSQL

  3. Hur ansluter jag till en SQL Server-databas i CodeIgniter?

  4. Hur lagrar man detta analyserade XML-dokument effektivt i MySQL-databasen med Python?