【问题标题】:Putting mutliple fields into a Field Name with SQL for XML使用 SQL for XML 将多个字段放入字段名称
【发布时间】:2015-10-20 10:23:25
【问题描述】:

问题:我想将更多来自“组”的真实数据放入包含其他子字段的父 XML 字段中。

查询:我可以将相同的详细信息捆绑到一个字段中以节省文件大小和导入时间。

<ParentField Field1="1" Field2="X" Field3="SomeText"> 

另外是我正在努力做的好习惯,或者我应该保留我所拥有的

在 UPRN 之上的某些字段(例如数据)也能够进入父值。我见过这样的代码:

使用我拥有的 SQL 代码,我该如何修改它? (下面的片段)

USE DATABASE

SELECT      
      e.GroupFieldName,

      (SELECT 
      c.ShouldBeParent AS ShouldBeParent
      ,c.ChildIsOkayHere AS ChildIsOkayHere

      FROM TblTableC c
      WHERE c.GroupFieldName = e.GroupFieldName 
      FOR XML PATH('LineItem'), type
      )

  FROM TblTableE e
  JOIN
  TblTableC c 
  ON e.GroupFieldName = c.UPRN  

  GROUP BY e.UPRN

FOR XML PATH('GroupFieldName') , ROOT ('SURVEYDATA')

示例(我所拥有的):

<SURVEYDATA>
  <UPRN_GROUP>
    <UPRN>SH1001</UPRN>
 <CHILD>
      <Field1>Some Text </Field1>
</CHILD> 
<CHILD>
      <Field1>Some Other Text </Field1>
</CHILD> 
  </UPRN_GROUP>
  <UPRN_GROUP>
    <UPRN>SH1001</UPRN>
 <CHILD>
      <Field1>Some Text </Field1>
</CHILD> 
<CHILD>
      <Field1>Some Other Text </Field1>
</CHILD> 
  </UPRN_GROUP>
</SURVEYDATA>

【问题讨论】:

  • 你能举个例子,应该是什么输出?请使用您的“示例(我所拥有的),复制它,并按照您想要的方式对其进行修改。请用一些示例数据给出您的数据源的结构。最好创建一个小提琴
  • 添加了一行代码,我必须忘记/错过了。我把它放在我的记事本里了!它会去 现在的地方
  • 您好,如果我的回答可以帮助您解决您的问题,那么投票将是非常友好的 - 如果它帮助您解决了这个问题 - 将其标记为已接受。谢谢!

标签: sql sql-server xml


【解决方案1】:

我认为您必须自己找到解决方案,因为您提供的信息不足。阅读 FOR XML PATH。

接下来你会发现一堆语句可以玩弄。将它们复制到一个空的查询窗口并执行。特别注意我命名列的方式。带有“@”的名称将是属性,“纯”名称将是元素。

DECLARE @tbl TABLE(id INT, Caption VARCHAR(100));
INSERT INTO @tbl VALUES(1,'Caption 1'),(2,'Caption 2'),(3,'Caption 3');

DECLARE @tblChildren TABLE(id INT,ParentId INT,Caption VARCHAR(100));
INSERt INTO @tblChildren VALUES(1,1,'Caption 1.1'),(2,1,'Caption 1.2'),(3,1,'Caption 1.3')
                              ,(4,2,'Caption 2.1'),(5,2,'Caption 2.2')
                              ,(6,3,'Caption 3.1');

--Simple SELECT
SELECT tbl.id AS ParentId
      ,tbl.Caption AS ParentCaption
      ,ch.id AS ChildId 
      ,ch.Caption AS ChildCaption
FROM @tbl AS tbl
INNER JOIN @tblChildren AS ch ON tbl.id=ch.ParentId;

--XML with elements and attributes (play around with this...)
--Children are not nested...
SELECT tbl.Caption AS [Parent/@Caption]
      ,tbl.id AS [Parent/@Id]
      ,ch.Caption AS [Child/@Caption]
      ,ch.id AS [Child/@Id] 
FROM @tbl AS tbl
INNER JOIN @tblChildren AS ch ON tbl.id=ch.ParentId
FOR XML PATH('row'),ROOT('root');

--XML with elements and attributes (play around with this...)
--Children are blocked...
SELECT tbl.Caption AS [Parent/@ParentCaption]
      ,tbl.id AS [Parent/@Id]
      ,(SELECT id AS [@id]
              ,Caption AS [@Caption]
        FROM @tblChildren 
        WHERE ParentId=tbl.id
        FOR XML PATH('Child'),ROOT('Children'),TYPE
        )
FROM @tbl AS tbl
FOR XML PATH('row'),ROOT('root');

--XML with elements and attributes (play around with this...)
--Children are nested...
--No row-tag needed, as everything is nested
SELECT tbl.Caption AS [Parent/@ParentCaption]
      ,tbl.id AS [Parent/@Id]
      ,(SELECT id AS [@id]
              ,Caption AS [@Caption]
        FROM @tblChildren 
        WHERE ParentId=tbl.id
        FOR XML PATH('Child'),TYPE
        ) AS [Parent/Children]
FROM @tbl AS tbl
FOR XML PATH(''),ROOT('root');

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-10
    • 1970-01-01
    • 2015-04-27
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 2021-08-26
    相关资源
    最近更新 更多