根据DB列中的值命名xml节点

时间:2014-09-25 14:49:09

标签: sql xml

目前我有一个像这样构建的xml结构。

<Project>
  <ProjectAttribute>
    <AttributeId></AttributeId>
    <FieldName></FieldName>
    <Title></Title>
    <DisplayRow></DisplayRow>
    <DisplayColumn></DisplayColumn>
    <IsRequired></IsRequired>
    <RequiredErrorMessage></RequiredErrorMessage>
    <DevExpressControl>
      <DevExpressControlId></DevExpressControlId>
      <Class></Class>
      <ClientNamePrefix></ClientNamePrefix>
    </DevExpressControl>
    <DataType>
      <DataTypeId></DataTypeId>
      <Name></Name>
    </DataType>
  </ProjectAttribute>
</Project>

我想用FieldName的值重命名ProjectAttribute。我不确定如何做到这一点,看看当我尝试将该字段的值放入XML路径时,我得到一个错误。

这是我的sql的样子。

Set @output = (
        SELECT poa.AttributeId, pa.FieldName, pa.Title, poa.DisplayRow,
            poa.DisplayColumn, poa.IsRequired, pa.RequiredErrorMessage,
            (SELECT de.DevExpressControlId, de.Class, de.ClientNamePrefix
                FROM SCC_DevExpressControl de
                WHERE de.DevExpressControlId = pa.DevExpressControlId
                FOR XML Path(''), type) AS DevExpressControl,
            (SELECT dt.DataTypeId, dt.Name
                FROM SCC_DataType dt
                WHERE dt.DataTypeId = pa.DataTypeId
                FOR XML Path(''), type) AS DataType
        FROM SCC_ProjectOfficeAttribute poa
            LEFT JOIN SCC_ProjectAttribute pa ON poa.AttributeId = pa.AttributeId
        WHERE poa.OfficeId = @OfficeId
            AND poa.Status = 1
        ORDER BY poa.DisplayRow, poa.DisplayColumn
        FOR XML Path('ProjectAttribute'), type, Root('Project'))

    select @output

@OfficeId只是一个int,而@output就是xml。我在ProjectAttribute的XML Path中编写的是我想要替换的内容。我的问题是如何在那里获得这个价值?

更新:我仍然有些不知所措。我已经尝试将AttributeId和FieldName之类的东西移动到ProjectAttribute的主节点本身,但这并不能真正满足我的要求。

0 个答案:

没有答案