XML自动Sql Server未提供正确的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

我正在尝试使用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 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');