XML自动Sql Server未提供正确的XML格式?
我正在尝试使用FOR XML AUTO生成XML,但没有得到预期的XML格式XML自动Sql Server未提供正确的XML格式?,sql,sql-server,xml,sql-server-2008,sql-server-2008-r2,Sql,Sql Server,Xml,Sql Server 2008,Sql Server 2008 R2,我正在尝试使用FOR XML AUTO生成XML,但没有得到预期的XML格式 SELECT OMR.RIDER_NAME AS RiderName, /*CHANGES MADE FOR PWR RIDER DETAILS BINDING IN CPF FORM*/ CASE WHEN ORD.FK_RIDER_ID IN ('1','2') THEN ORD.DHCB_RIDER_AMOUNT ELSE ORD.SUM_ASSURED END
SELECT OMR.RIDER_NAME AS RiderName,
/*CHANGES MADE FOR PWR RIDER DETAILS BINDING IN CPF FORM*/
CASE WHEN ORD.FK_RIDER_ID IN ('1','2') THEN ORD.DHCB_RIDER_AMOUNT ELSE ORD.SUM_ASSURED END AS SumAssured,
CASE WHEN ORD.FK_RIDER_ID IN ('1','2') THEN ORD.DHCB_RIDER_TERM ELSE ORD.POLICY_BENEFIT_PERIOD END AS PolicyBenefitPeriod,
CASE WHEN ORD.FK_RIDER_ID IN ('1','2') THEN ORD.DHCB_RIDER_TERM ELSE ORD.PREMIUM_PAYMENT_TERM END AS PremiumPaymentTerm
FROM RD ORD INNER JOIN RM OMR ON OMR.PK_RIDER_ID = ORD.FK_RIDER_ID
WHERE ORD.FK_QUOTATION_ID = 78027
FOR XML AUTO , ROOT('RIDER')
我对xml格式不太了解
<RIDER>
<OMR RiderName="Test" SumAssured="0.00" PolicyBenefitPeriod="15" PremiumPaymentTerm="1" />
<OMR RiderName="Test1" SumAssured="0.00" PolicyBenefitPeriod="15" PremiumPaymentTerm="1" />
</RIDER>
我想要以下格式的xml
<RIDER>
<OMR RiderName="test">
<ORD SumAssured="0" PolicyBenefitPeriod="15" PremiumPaymentTerm="0" />
</OMR>
<OMR RiderName="test">
<ORD SumAssured="0" PolicyBenefitPeriod="15" PremiumPaymentTerm="0" />
</OMR>
</RIDER>
测试数据
查询
在下面的查询中,我关联了一个列上的内部查询,该列不太可能是表的主键列,因为我不知道实际的模式,我刚刚提出了这个模拟数据,还想指出,您需要在where子句中使用主键列。
其中t.PremiumPaymentTerm=PremiumPaymentTerm
SELECT t.RiderName AS [@RiderName]
,(SELECT SumAssured AS [@SumAssured]
,PolicyBenefitPeriod AS [@PolicyBenefitPeriod]
,PremiumPaymentTerm AS [@PremiumPaymentTerm]
FROM @t
WHERE t.PremiumPaymentTerm = PremiumPaymentTerm
FOR XML PATH('ORD'),TYPE)
FROM @t t
FOR XML PATH('OMR') , ROOT('RIDER')
结果
这可能有效,但未经测试-
SELECT
OMR.RIDER_NAME AS "@RiderName",
(SELECT OMR.RIDER_NAME AS RiderName,
/*CHANGES MADE FOR PWR RIDER DETAILS BINDING IN CPF FORM*/
CASE WHEN ORD.FK_RIDER_ID IN ('1','2') THEN ORD.DHCB_RIDER_AMOUNT ELSE ORD.SUM_ASSURED END AS "SumAssured",
CASE WHEN ORD.FK_RIDER_ID IN ('1','2') THEN ORD.DHCB_RIDER_TERM ELSE ORD.POLICY_BENEFIT_PERIOD END AS "PolicyBenefitPeriod",
CASE WHEN ORD.FK_RIDER_ID IN ('1','2') THEN ORD.DHCB_RIDER_TERM ELSE ORD.PREMIUM_PAYMENT_TERM END AS "PremiumPaymentTerm"
FROM RD ORD
WHERE OMR.PK_RIDER_ID = ORD.FK_RIDER_ID
WHERE ORD.FK_QUOTATION_ID = 78027
FOR XML PATH('ORD'), TYPE) AS "ORD"
FROM RM OMR
FOR XML PATH('OMR') , ROOT('RIDER');
你能用一些测试数据设置一个sql编辑器吗?AUTO适用于简单的情况。完全控制和使用
<RIDER>
<OMR RiderName="Test1">
<ORD SumAssured="0.10" PolicyBenefitPeriod="10" PremiumPaymentTerm="1" />
</OMR>
<OMR RiderName="Test2">
<ORD SumAssured="0.20" PolicyBenefitPeriod="20" PremiumPaymentTerm="2" />
</OMR>
</RIDER>
SELECT OMR.RIDER_NAME AS [@RiderName]
, (SELECT
CASE WHEN ORD.FK_RIDER_ID IN ('1','2')
THEN ORD.DHCB_RIDER_AMOUNT
ELSE ORD.SUM_ASSURED END AS [@SumAssured]
,CASE WHEN ORD.FK_RIDER_ID IN ('1','2')
THEN ORD.DHCB_RIDER_TERM
ELSE ORD.POLICY_BENEFIT_PERIOD END AS [@PolicyBenefitPeriod]
,CASE WHEN ORD.FK_RIDER_ID IN ('1','2')
THEN ORD.DHCB_RIDER_TERM
ELSE ORD.PREMIUM_PAYMENT_TERM END AS [@PremiumPaymentTerm]
FROM RD ORD
WHERE OMR.PK_RIDER_ID = ORD.FK_RIDER_ID
AND ORD.FK_QUOTATION_ID = 78027
FOR XML PATH('ORD'),TYPE)
FROM RM OMR
FOR XML PATH('OMR') , ROOT('RIDER')
SELECT
OMR.RIDER_NAME AS "@RiderName",
(SELECT OMR.RIDER_NAME AS RiderName,
/*CHANGES MADE FOR PWR RIDER DETAILS BINDING IN CPF FORM*/
CASE WHEN ORD.FK_RIDER_ID IN ('1','2') THEN ORD.DHCB_RIDER_AMOUNT ELSE ORD.SUM_ASSURED END AS "SumAssured",
CASE WHEN ORD.FK_RIDER_ID IN ('1','2') THEN ORD.DHCB_RIDER_TERM ELSE ORD.POLICY_BENEFIT_PERIOD END AS "PolicyBenefitPeriod",
CASE WHEN ORD.FK_RIDER_ID IN ('1','2') THEN ORD.DHCB_RIDER_TERM ELSE ORD.PREMIUM_PAYMENT_TERM END AS "PremiumPaymentTerm"
FROM RD ORD
WHERE OMR.PK_RIDER_ID = ORD.FK_RIDER_ID
WHERE ORD.FK_QUOTATION_ID = 78027
FOR XML PATH('ORD'), TYPE) AS "ORD"
FROM RM OMR
FOR XML PATH('OMR') , ROOT('RIDER');