此询问中实际上有两个问题。 第一个与从具有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>