我被困在 SQL 中 - 有人可以幫忙嗎?
我有一個如下所示的 XML;我想讀取 XML 標記并在 SQL Server 中創建一個表。
我嘗試了下面顯示的查詢,但沒有獲取資料。結果集為空。我使用了交叉應用并轉換為 xml。
顯然我可以撰寫 XPath 查詢以將標簽選擇到列中,這是我想要的,除了有 1000 個可能的標簽名稱,我不想把它們全部寫出來(并且可能錯過一個),因此我正在尋找我們讀取 xml 標簽并在 SQL 中生成帶有值和標簽的表的解決方案。
SELECT
t.ID,
T0.Color.value('local-name(.)', 'nvarchar(max)') AS TagName,
T0.Color.value('(@name)[1]','nvarchar(max)') AS EntityName,
T0.Color.value('text()[1]','nvarchar(max)') AS TagValue
FROM
ConfigurationDnaItem t
CROSS APPLY
(SELECT
CAST(t.Value AS XML)) AS A(AllNodes)
CROSS APPLY
A.AllNodes.nodes('/hierarchy/nodes/list-entity') AS T0(Color)
WHERE
id = '1D09BFCB-AE0A-4346-835D-4BBCF2BBB503'
需要輸出
請參閱上面的表格結構,我正在尋找從選擇 N/A 中洗掉會更好的最后一行。
感謝幫助。
<?xml version="1.0" encoding="utf-16"?>
<hierarchy name="DGPaintH" xmlns="urn:guru.cincom.com-Hierarchy">
<nodes>
<list-entity name="HubPaintDetail">
<values>
<value>
<key-value><![CDATA[AFL.9H1B]]></key-value>
<characteristics>
<characteristic name="Value" type="list"><![CDATA[AFL.9H1B]]></characteristic>
<characteristic name="Description" type="string"><![CDATA[Fleet Red(PPG Code: AFL.9H1B)]]></characteristic>
<characteristic name="JDE_ITEM_NUMBER" type="string"><![CDATA[]]></characteristic>
<characteristic name="PRICE_EX_FACTORY" type="numeric">0.00</characteristic>
<characteristic name="PRICE_RETAIL" type="numeric">0.00</characteristic>
<characteristic name="PRICE_DIFFERENTIAL" type="numeric">0.00</characteristic>
<characteristic name="OPTION_WEIGHT" type="numeric">0.00</characteristic>
<characteristic name="WEIGHT_DIFFERENTIAL" type="numeric">0.00</characteristic>
<characteristic name="QUANTITY" type="numeric">0</characteristic>
<characteristic name="Name" type="string"><![CDATA[]]></characteristic>
<characteristic name="CatCode1" type="string"><![CDATA[02]]></characteristic>
<characteristic name="CatCode2" type="string"><![CDATA[33]]></characteristic>
<characteristic name="CatCode3" type="string"><![CDATA[DP]]></characteristic>
</characteristics>
</value>
</values>
<extended-properties>
<extended-property name="ALTNAME" type="string"><![CDATA[Hubs]]></extended-property>
<extended-property name="CatCode1" type="string"><![CDATA[02]]></extended-property>
<extended-property name="CatCode2" type="string"><![CDATA[33]]></extended-property>
<extended-property name="CatCode3" type="string"><![CDATA[DP]]></extended-property>
</extended-properties>
</list-entity>
<list-entity name="DoorPaintDetail">
<values>
<value>
<key-value><![CDATA[AFL.DTT6]]></key-value>
<characteristics>
<characteristic name="Value" type="list"><![CDATA[AFL.DTT6]]></characteristic>
<characteristic name="Description" type="string"><![CDATA[GELCOAT WHITE]]></characteristic>
<characteristic name="JDE_ITEM_NUMBER" type="string"><![CDATA[]]></characteristic>
<characteristic name="PRICE_EX_FACTORY" type="numeric">0.00</characteristic>
<characteristic name="PRICE_RETAIL" type="numeric">0.00</characteristic>
<characteristic name="PRICE_DIFFERENTIAL" type="numeric">0.00</characteristic>
<characteristic name="OPTION_WEIGHT" type="numeric">0.00</characteristic>
<characteristic name="WEIGHT_DIFFERENTIAL" type="numeric">0.00</characteristic>
<characteristic name="QUANTITY" type="numeric">0</characteristic>
<characteristic name="Name" type="string"><![CDATA[]]></characteristic>
<characteristic name="CatCode1" type="string"><![CDATA[02]]></characteristic>
<characteristic name="CatCode2" type="string"><![CDATA[33]]></characteristic>
<characteristic name="CatCode3" type="string"><![CDATA[DS]]></characteristic>
</characteristics>
</value>
</values>
<extended-properties>
<extended-property name="ALTNAME" type="string"><![CDATA[Door]]></extended-property>
<extended-property name="CatCode1" type="string"><![CDATA[02]]></extended-property>
<extended-property name="CatCode2" type="string"><![CDATA[33]]></extended-property>
<extended-property name="CatCode3" type="string"><![CDATA[DS]]></extended-property>
</extended-properties>
</list-entity>
<list-entity name="UnderPaintDetail">
<values>
<value>
<key-value><![CDATA[AFL.9H1B]]></key-value>
<characteristics>
<characteristic name="Value" type="list"><![CDATA[AFL.9H1B]]></characteristic>
<characteristic name="Description" type="string"><![CDATA[Fleet Red(PPG Code: AFL.9H1B)]]></characteristic>
<characteristic name="JDE_ITEM_NUMBER" type="string"><![CDATA[]]></characteristic>
<characteristic name="PRICE_EX_FACTORY" type="numeric">0.00</characteristic>
<characteristic name="PRICE_RETAIL" type="numeric">0.00</characteristic>
<characteristic name="PRICE_DIFFERENTIAL" type="numeric">0.00</characteristic>
<characteristic name="OPTION_WEIGHT" type="numeric">0.00</characteristic>
<characteristic name="WEIGHT_DIFFERENTIAL" type="numeric">0.00</characteristic>
<characteristic name="QUANTITY" type="numeric">0</characteristic>
<characteristic name="Name" type="string"><![CDATA[]]></characteristic>
<characteristic name="CatCode1" type="string"><![CDATA[02]]></characteristic>
<characteristic name="CatCode2" type="string"><![CDATA[33]]></characteristic>
<characteristic name="CatCode3" type="string"><![CDATA[DM]]></characteristic>
</characteristics>
</value>
</values>
<extended-properties>
<extended-property name="ALTNAME" type="string"><![CDATA[Under]]></extended-property>
<extended-property name="CatCode1" type="string"><![CDATA[02]]></extended-property>
<extended-property name="CatCode2" type="string"><![CDATA[33]]></extended-property>
<extended-property name="CatCode3" type="string"><![CDATA[DM]]></extended-property>
</extended-properties>
</list-entity>
<list-entity name="PaintFleetMasterBoxesList">
<values>
<value>
<key-value><![CDATA[AFL.9H1B]]></key-value>
<characteristics>
<characteristic name="Value" type="list"><![CDATA[AFL.9H1B]]></characteristic>
<characteristic name="Description" type="string"><![CDATA[Fleet Red(PPG Code: AFL.9H1B)]]></characteristic>
<characteristic name="JDE_ITEM_NUMBER" type="string"><![CDATA[]]></characteristic>
<characteristic name="PRICE_EX_FACTORY" type="numeric">0.00</characteristic>
<characteristic name="PRICE_RETAIL" type="numeric">0.00</characteristic>
<characteristic name="PRICE_DIFFERENTIAL" type="numeric">0.00</characteristic>
<characteristic name="OPTION_WEIGHT" type="numeric">0.00</characteristic>
<characteristic name="WEIGHT_DIFFERENTIAL" type="numeric">0.00</characteristic>
<characteristic name="QUANTITY" type="numeric">0</characteristic>
<characteristic name="HasNSO" type="boolean">false</characteristic>
<characteristic name="CatCode1" type="string"><![CDATA[02]]></characteristic>
<characteristic name="CatCode2" type="string"><![CDATA[33]]></characteristic>
<characteristic name="CatCode3" type="string"><![CDATA[DS]]></characteristic>
</characteristics>
</value>
</values>
<extended-properties>
<extended-property name="ALTNAME" type="string"><![CDATA[Boxes]]></extended-property>
</extended-properties>
</list-entity>
<list-entity name="RadiusGuardPaint">
<values>
<value>
<key-value><![CDATA[N/A]]></key-value>
<characteristics>
<characteristic name="Value" type="list"><![CDATA[N/A]]></characteristic>
<characteristic name="Description" type="string"><![CDATA[Guard Colour not applicable]]></characteristic>
<characteristic name="JDE_ITEM_NUMBER" type="string"><![CDATA[]]></characteristic>
<characteristic name="PRICE_EX_FACTORY" type="numeric">0.00</characteristic>
<characteristic name="PRICE_RETAIL" type="numeric">0.00</characteristic>
<characteristic name="PRICE_DIFFERENTIAL" type="numeric">0.00</characteristic>
<characteristic name="OPTION_WEIGHT" type="numeric">0.00</characteristic>
<characteristic name="WEIGHT_DIFFERENTIAL" type="numeric">0.00</characteristic>
<characteristic name="QUANTITY" type="numeric">1</characteristic>
</characteristics>
</value>
</values>
<extended-properties>
<extended-property name="ALTNAME" type="string"><![CDATA[Radius Guard Colour]]></extended-property>
<extended-property name="CatCode1" type="string"><![CDATA[02]]></extended-property>
<extended-property name="CatCode2" type="string"><![CDATA[33]]></extended-property>
<extended-property name="CatCode3" type="string"><![CDATA[DS]]></extended-property>
</extended-properties>
</list-entity>
</nodes>
</hierarchy>
uj5u.com熱心網友回復:
目前還不清楚您的預期輸出是什么,但看起來您想要這樣的東西
WITH XMLNAMESPACES(DEFAULT 'urn:guru.cincom.com-Hierarchy')
SELECT t.ID
,T0.Color.value('(extended-properties/extended-property[@name = "ALTNAME"]/text())[1]', 'nvarchar(max)') AS TagName
,T0.Color.value('@name','nvarchar(max)') AS EntityName
,T0.Color.value('(values/value/key-value/text())[1]','nvarchar(max)') AS TagValue
FROM ConfigurationDnaItem t
CROSS APPLY (SELECT CAST(t.Value AS XML)) As A(AllNodes)
CROSS APPLY A.AllNodes.nodes('/hierarchy/nodes/list-entity[not(values/value/key-value/text() = "N/A")]') AS T0(Color)
where t.id = '1D09BFCB-AE0A-4346-835D-4BBCF2BBB503';
您現有的查詢存在許多問題:
- 您缺少命名空間宣告。
local-name(.)會給你 node namelist-entity,目前還不清楚你為什么想要那個。- 您似乎想要的一些資料存盤在
extended-properties/extended-property其中,您需要按屬性過濾name,然后提取內部文本。 @namename為您獲取影像中不存在的屬性。然而,我把它留在了里面。它不需要[1].text()[1]不會得到任何東西,因為背景關系節點沒有任何直接的內部文本節點。相反,您似乎想下降到values/value/key-value/text().- 要過濾掉該
N/A值,您需要以下謂詞[not(values/value/key-value/text() = "N/A")]
db<>小提琴
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/419562.html
標籤:
