2017-08-08 209 views
1

我知道這個問題已經被少數其他成員問過了,但他們有稍微不同的需求,我不能完全將它們與我的情況聯繫起來。所以再次問這個道歉。將XML轉換爲SQL Server數據庫

我有以下XML文件(這只是它的第一部分),我需要將其轉換爲SQL Server表。

我該如何做到這一點?我是一個初學者,但仍然試圖做一個大項目。我不太瞭解SQL,也完全不知道如何通過SQL服務器讀取XML文件。我想CODETYPE元素也去爲一列,反映了相應的值

<ReferenceDataItems CodeType="AboriginalOrTorresStraitIslanderOrigin"> 
    <Item> 
    <CodeValue>NO</CodeValue> 
    <CodeDescription>No</CodeDescription> 
    <OrderNumber>1</OrderNumber> 
    </Item> 
    <Item> 
    <Item> 
     <CodeValue>TSI</CodeValue> 
     <CodeDescription>Torres Strait Islander</CodeDescription> 
     <OrderNumber>3</OrderNumber> 
    </Item> 
    <Item> 
     <CodeValue>BOTH</CodeValue> 
     <CodeDescription>Aboriginal and Torres Strait Islander</CodeDescription> 
     <OrderNumber>4</OrderNumber> 
    </Item> 
    <Item> 
     <CodeValue>NOTSTATED</CodeValue> 
     <CodeDescription>Not stated/Inadequately described</CodeDescription> 
     <OrderNumber>5</OrderNumber> 
    </Item> 
</ReferenceDataItems> 
<ReferenceDataItems CodeType="AccommodationType"> 
    <Item> 
    <CodeValue>BOARDING</CodeValue> 
    <CodeDescription>Boarding house</CodeDescription> 
    <OrderNumber>1</OrderNumber> 
    </Item> 
    <Item> 
    <CodeValue>TRANSITION</CodeValue> 
    <CodeDescription>Crisis, emergency or transition</CodeDescription> 
    <OrderNumber>2</OrderNumber> 
    </Item> 
    <Item> 
    <CodeValue>LIVINGUNIT</CodeValue> 
    <CodeDescription>Independent living unit</CodeDescription> 
    <OrderNumber>3</OrderNumber> 
    </Item> 
    <Item> 
    <CodeValue>COMMUNITY</CodeValue> 
    <CodeDescription>Indigenous community/settlement</CodeDescription> 
    <OrderNumber>4</OrderNumber> 
    </Item> 
    <Item> 
    <CodeValue>INSTITUTION</CodeValue> 
    <CodeDescription>Institutional setting (i.e. residential aged care, hospital)</CodeDescription> 
    <OrderNumber>5</OrderNumber> 
    </Item> 
    <Item> 
    <CodeValue>CLIENTOWNED</CodeValue> 
    <CodeDescription>Private residence - client or family owned/purchasing</CodeDescription> 
    <OrderNumber>6</OrderNumber> 
    </Item> 
    <Item> 
    <CodeValue>PRIVATERENTAL</CodeValue> 
    <CodeDescription>Private residence - private rental</CodeDescription> 
    <OrderNumber>7</OrderNumber> 
    </Item> 
    <Item> 
    <CodeValue>PUBLICRENTAL</CodeValue> 
    <CodeDescription>Private residence - public rental</CodeDescription> 
    <OrderNumber>8</OrderNumber> 
    </Item> 
    <Item> 
    <CodeValue>PUBLICSHELTER</CodeValue> 
    <CodeDescription>Public shelter</CodeDescription> 
    <OrderNumber>9</OrderNumber> 
    </Item> 
    <Item> 
    <CodeValue>SUPPORTED</CodeValue> 
    <CodeDescription>Supported accommodation</CodeDescription> 
    <OrderNumber>10</OrderNumber> 
    </Item> 
    <Item> 
    <CodeValue>NOTSTATED</CodeValue> 
    <CodeDescription>Not stated</CodeDescription> 
    <OrderNumber>11</OrderNumber> 
    </Item> 
    <Item> 
    <CodeValue>OTHER</CodeValue> 
    <CodeDescription>Other</CodeDescription> 
    <OrderNumber>12</OrderNumber> 
    </Item> 
</ReferenceDataItems> 

回答

1

假設你有一個名爲@xml可變整個XML數據,那麼你可以使用這個XQuery代碼提取細節信息:

SELECT 
    CodeType = XC.value('@CodeType', 'varchar(50)'), 
    CodeValue = XC2.value('(CodeValue)[1]', 'varchar(100)'), 
    CodeDescription = XC2.value('(CodeDescription)[1]', 'varchar(100)'), 
    OrderNumber = XC2.value('(OrderNumber)[1]', 'int') 
FROM 
    @xml.nodes('/ReferenceDataItems') AS XT(XC) 
CROSS APPLY 
    XC.nodes('Item') AS XT2(XC2) 

這將返回一個數據集是這樣的:

enter image description here

^h如果你想將這個表格插入你的問題並不清楚 - 你需要自己弄清楚......

+0

非常感謝!首先,抱歉,我不知道如何接受您在我的帖子中執行的修改。我按回滾,它轉到舊的帖子風格。 對不起,我剛纔說我是新來的遊戲。我應該運行SQL服務器並將此查詢作爲新查詢啓動嗎? 我想把他們放到一個表格調用'參考數據' 此外,這是我想放的XML文件的路徑? ('/ ReferenceDataItems') –

+0

@RandikaWijekoon:你不需要*接受*任何東西 - 只要離開這個帖子 - 編輯和更具可讀性。 **不要**回滾..... –

+0

**(1)**您需要**將XML加載到SQL Server變量 - Google爲此,有大量資源向您顯示如何執行此操作。然後**(2)**你需要確保你的'ReferenceData'表中有所有必要的列,然後**(3)**你可以使用'INSERT INTO dbo.ReferenceData(CodeType,CodeValue,CodeDescription ,OrderNumber)SELECT ......'(並且使用上面的'SELECT'作爲你的INSERT語句的* source *) –

相關問題