如何在XQuery for SQL Server中联接元素值?

时间:2019-06-04 15:25:03

标签: sql-server xquery

如果我有这个XML

<TradingInquirySearchResult xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <SearchTerm>test</SearchTerm>
  <CompanyFound>true</CompanyFound>
  <CompanyInfoCollection>
    <CompanyInfo>
      <CompanyID>26</CompanyID>
      <CompanyName>test</CompanyName>
      <Status>Unrestricted</Status>
      <SearchTags>
        <Tag>test2</Tag>
        <Tag>test3</Tag>
        <Tag>test4</Tag>
      </SearchTags>
    </CompanyInfo>
  </CompanyInfoCollection>
</TradingInquirySearchResult>

我想得到"test2;test3;test4"。如何为第一个<Tag>标签加入<CompanyInfo>的值?

我尝试了TransactionData.value('(/TradingInquirySearchResult/CompanyInfoCollection/CompanyInfo[1]/SearchTags/Tag)[1]', 'nvarchar(1000)')

但是没有用。

谢谢

1 个答案:

答案 0 :(得分:1)

在使用SQL Server 2012(而不是2017+)时,聚合字符串的常用方法是使用RUN echo -e '#!/bin/bash\n$(find / -type f -name "python*" | grep "python3.6$") "$@"' > /usr/bin/py3 && \ chmod +x /usr/bin/py3 CMD ["py3", "-V"] FOR XML PATH,并且可以获取节点{的多个值{1}}使用STUFF运算符。这将为您提供以下内容:

Tag

编辑多个公司时进行猜测。

如果您只想要第一家公司,那么可以,使用nodes可以:

DECLARE @XML xml = '
<TradingInquirySearchResult xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <SearchTerm>test</SearchTerm>
  <CompanyFound>true</CompanyFound>
  <CompanyInfoCollection>
    <CompanyInfo>
      <CompanyID>26</CompanyID>
      <CompanyName>test</CompanyName>
      <Status>Unrestricted</Status>
      <SearchTags>
        <Tag>test2</Tag>
        <Tag>test3</Tag>
        <Tag>test4</Tag>
      </SearchTags>
    </CompanyInfo>
  </CompanyInfoCollection>
</TradingInquirySearchResult>';


SELECT STUFF((SELECT N';' +  ST.Tag.value('(./text())[1]','nvarchar(100)')
              FROM (VALUES(@XML))V(X)
              CROSS APPLY V.X.nodes('/TradingInquirySearchResult/CompanyInfoCollection/CompanyInfo/SearchTags/Tag') ST(Tag)
              FOR XML PATH(N''),TYPE).value('.','nvarchar(MAX)'),1,1,N'') AS Tags

但是,如果您希望每个公司排一行,那么您将希望执行以下操作:

[1]