簡體   English   中英

如何從 SQL XML 列中提取值列表

[英]How to extract a list of values from a SQL XML column

這是我的 XML:

<Triggers>
  <Trigger>
    <Name>DrugName</Name>
    <Values>
      <Value>Meclofenamate</Value>
      <Value>Meloxicam</Value>
      <Value>Vimovo</Value>
      <Value>Nabumetone</Value>
      <Value>Qmiiz</Value>
      <Value>Tolmetin</Value>    
    </Values>
  </Trigger>
  <Trigger>
    <Name>State</Name>
    <Values>
      <Value>MI</Value>
    </Values>
  </Trigger>
  <Trigger>
    <Name>BenefitType</Name>
    <Values>
      <Value>Pharmacy</Value>
    </Values>
  </Trigger>
  <Trigger>
    <Name>LineOfBusiness</Name>
    <Values>
      <Value>Medicaid</Value>
    </Values>
  </Trigger>
</Triggers>

我的目標是讓 output 看起來像這樣:

ID      DrugName        State     BenefitType   LineOfBusiness
6500    Meclofenamate   MI        Pharmacy      Medicaid
6501    Meloxicam       MI        Pharmacy      Medicaid
6502    Vimovo          MI        Pharmacy      Medicaid
6503    Nabumetone      MI        Pharmacy      Medicaid
6504    Qmiiz           MI        Pharmacy      Medicaid
6505    Tolmetin        MI        Pharmacy      Medicaid

在廣泛搜索 XML 以這種方式組織后,我在 stackoverflow 上找不到任何示例,而我發現、調整和應用的示例導致我在一列中獲得所有值的列表(狀態值、BenefitType 值等. 與 DrugName 值混合在一起)。

ID 列不是 XML 的一部分,但我需要在我的 output 中有它。

這里的表格看起來像 XML 列。

您需要.nodes XML function 來斷開觸發節點,然后再斷開值行。

要獲取節點的值而不是其名稱,我們使用text()

為了驗證我們是否為每一列抓取了正確的Trigger節點,我們使用[]謂詞進行檢查(有點像where )。

.value需要單個值,因此我們使用[1]來獲取第一個節點。

SELECT
    DrugName = drugs.DrugName.value('text()[1]','nvarchar(100)'),
    State = tr.Trigg.value('Trigger[Name/text()="State"][1]/Values[1]/Value[1]/text()[1]', 'nvarchar(100)'),
    BenefitType = tr.Trigg.value('Trigger[Name/text()="BenefitType"][1]/Values[1]/Value[1]/text()[1]', 'nvarchar(100)'),
    LineOfBusiness = tr.Trigg.value('Trigger[Name/text()="LineOfBusiness"][1]/Values[1]/Value[1]/text()[1]', 'nvarchar(100)')
FROM @xml.nodes('/Triggers') tr(Trigg)
OUTER APPLY tr.Trigg.nodes('Trigger[Name/text()="DrugName"][1]/Values/Value') drugs(DrugName)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM