簡體   English   中英

在SQL Server中查詢XML

[英]Query XML in SQL Server

我有這樣的XML 格式

<Maximum.Edm.CodeIncludedInCalculation >
  <CalculationsByProvince>
    <Maximum.Edm.IncludedInByProvince  Province="QC">
      <RevenueCodeCalculations CalculationListType="RevenueCode">
        <Maximum.Edm.CalculationIncluded  Code="@Vacation" IsSelected="True" />
        <Maximum.Edm.CalculationIncluded  Code="@RRQ" IsSelected="True" />
        <Maximum.Edm.CalculationIncluded  Code="@EmploymentInsurance" IsSelected="True" />
        [...]
      </RevenueCodeCalculations>
      <TaxableBenefitCalculations CalculationListType="TaxableBenefits">
        <Maximum.Edm.CalculationIncluded  Code="1" IsSelected="False" />
        <Maximum.Edm.CalculationIncluded  Code="AV. VIE FE" IsSelected="True" />
      </TaxableBenefitCalculations>
      <DeductionCodeCalculations CalculationListType="DeductionCode">
        <Maximum.Edm.CalculationIncluded  Code="123" IsSelected="False" />
        <Maximum.Edm.CalculationIncluded  Code="456" IsSelected="True" />
        <Maximum.Edm.CalculationIncluded  Code="AC" IsSelected="False" />
       [...]
      </DeductionCodeCalculations>
    </Maximum.Edm.IncludedInByProvince>
    <Maximum.Edm.IncludedInByProvince  Province="ON">
      [...]
    </Maximum.Edm.IncludedInByProvince>
  </CalculationsByProvince>
</Maximum.Edm.CodeIncludedInCalculation>

我想創建一個簡單的查詢,該查詢將返回每個CalculationIncluded以及codeIsSelected值。 我的最終目標是創建一個存儲過程,該存儲過程將接收codeprovinceCalculationListType並返回IsSelected值。

我嘗試從此處此處此處使用示例,但我不斷得到null或空值。

我嘗試使用以下示例之一進行查詢:

select * from 
  (select 
     pref.value('(text())[1]', 'varchar(32)') as RoleName
   from 
      Payroll.RevenueCode CROSS APPLY
 IncludeInCalculation.nodes('/Maximum.Edm.CodeIncludedInCalculation/CalculationsByProvince/Maximum.Edm.IncludedInByProvince/RevenueCodeCalculations') AS IncludeInCalculation(pref)
 )  as Result

我的最終目標是創建一個存儲過程,該存儲過程將接收代碼,省份和CalculationListType並返回IsSelected值。

這不需要存儲過程...

以下將返回1(= true)或0(= false)或NULL(=不存在)

DECLARE @Province NVARCHAR(100)='QC';
DECLARE @ListType NVARCHAR(100)='RevenueCode';
DECLARE @Code NVARCHAR(100)='@EmploymentInsurance'

SELECT @xml.value(N'(/Maximum.Edm.CodeIncludedInCalculation
                     /CalculationsByProvince
                     /Maximum.Edm.IncludedInByProvince[@Province=sql:variable("@Province")]
                     /RevenueCodeCalculations[@CalculationListType=sql:variable("@ListType")]
                     /Maximum.Edm.CalculationIncluded[@Code=sql:variable("@Code")]/@IsSelected)[1]',N'bit')

暫無
暫無

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

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