提取XML数据并将其输出到文件以保存在文件夹中

时间:2019-06-17 19:14:44

标签: sql sql-server sql-server-2017

此询问中实际上有两个问题。 第一个与从具有3个类别的多个子记录的SQL查询创建XML文件有关。

生成的XML似乎将所有子级连接为一个值。 我需要将它们放在同一标签下。

第二个问题是尝试将结果文件输出到SQL Server上特定文件夹中的XML文件

我已经尝试了几种数据设置,但是似乎没有任何设置,例如包括[1]和[2],(1)和(2)在第二个值上消除了父级等。我在MS Access中做到了这一点使用XSLT转换

就输出而言,我尝试了BCP,queryout,OutputFile Output To和其他一些功能。查询表明已成功,但是没有创建文件。

SQL表(FD__Services_from_XML)如下所示:所有Varchar(50)字段

  Service_SRI     CovServ_Mod1     CovServ_Mod2
       1               B1               B2
       2               C1               C2
       3               D1               D2

生成XML的查询如下:

  DECLARE @fileName VARCHAR(50)
DECLARE @sqlStr VARCHAR(2000)
DECLARE @sqlCmd VARCHAR(1000)
--
SET @fileName = 'C:\Users\Steve\Downloads\XML_Export_Test_1.xml'
--
SET @sqlStr = 
'  
Select
  Service_SRI As [SourceRecordIdentifier], 
  CovServ_Mod1 As [ServiceModifiers/ServiceModifier],
  CovServ_Mod2 As [ServiceModifiers/ServiceModifier]
FROM FD__Services_from_XML
FOR XML PATH('ServiceEvent'), ROOT('ServiceEvents')
'
--
SET @sqlCmd = 'bcp "' + @sqlStr + '" queryout ' + @fileName + ' -w -T'
--
EXEC xp_cmdshell @sqlCmd

正如我之前提到的,我期望在其中创建文件     'C:\ Users \ Steve \ Downloads \ XML_Export_Test_1.xml' 没有创建文件。我确实收到了“查询成功执行”消息。

我收到的XML输出如下所示:      请注意,两个单独的字段Covserv_Mod1和Mod2是串联的

<ServiceEvents>
  <ServiceEvent>
    <SourceRecordIdentifier>1</SourceRecordIdentifier>
    <ServiceModifiers>
      <ServiceModifier>B1B2</ServiceModifier>
    </ServiceModifiers>
  </ServiceEvent>
etc ...
</ServiceEvents>

我一直在寻找的输出是:

<ServiceEvents>
  <ServiceEvent>
    <SourceRecordIdentifier>1</SourceRecordIdentifier>
    <ServiceModifiers>
      <ServiceModifier>B1</ServiceModifier>
      <ServiceModifier>B3</ServiceModifier>
    </ServiceModifiers>
   </ServiceEvent>
etc ...
</ServiceEvents>

SQL表:

CREATE TABLE [dbo].[FD__Services_from_XML](
[Service_SRI] [nvarchar](50) NOT NULL PRIMARY KEY,
[CovServ_Mod1] [nvarchar](50) NULL,
[CovServ_Mod2] [nvarchar](50) NULL
) ON [PRIMARY]

我从XML文件导入了XML数据,看起来像这样:

  <ServiceEvents>
    <ServiceEvent>
      <SourceRecordIdentifier>1</SourceRecordIdentifier> 
      <ServiceEventCoveredServiceModifiers>
        <ServiceEventCoveredServiceModifier>
          <ModifierCode>B1</ModifierCode> 
        </ServiceEventCoveredServiceModifier>
        <ServiceEventCoveredServiceModifier>
          <ModifierCode>B2</ModifierCode> 
        </ServiceEventCoveredServiceModifier>
      </ServiceEventCoveredServiceModifier>
    </ServiceEvent>
    etc. … (1, C1, C2) (3, D1, D2)
  </ServiceEvents>

0 个答案:

没有答案