【发布时间】:2020-09-16 21:21:48
【问题描述】:
我需要在具有这种格式的 SQL Server 中构建 XML。您可以看到第一行有两个 XMLNAMESPACES,但在 Location 旁边还有第三个。
<arrayofstuff xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/ACME.Domain.Core.ComplexTypes">
<stuff>
<Description>blue</Description>
<Location xmlns:d3p1="http://schemas.datacontract.org/2004/07/ACME.Infrastructure.CodeValues">
<d3p1:Code>64</d3p1:Code>
<d3p1:Description>Balloons</d3p1:Description>
</Location>
</stuff>
</arrayofstuff>
这是我目前所拥有的,以及一些示例数据。看起来第一个查询中有一个嵌套的 XML 查询,但我似乎无法第二次使用 WITH 语句,因为它必须是批处理中的第一个命令,所以我不知道该怎么做.
IF EXISTS(SELECT 1 FROM sys.tables WHERE object_id = OBJECT_ID('myTable'))
BEGIN;
DROP TABLE [myTable];
END;
GO
CREATE TABLE [myTable] (
[myTableID] INTEGER NOT NULL IDENTITY(1, 1),
[Description] VARCHAR(MAX) NULL,
[sourceID] INTEGER NOT NULL ,
[Location] VARCHAR(255) NULL,
[Code] VARCHAR(255) NULL,
[Location_Desc] VARCHAR(255) NULL,
PRIMARY KEY ([myTableID])
);
GO
INSERT INTO myTable([SourceID],[Description],[Location],[Code],[Location_Desc])
VALUES(3,'yellow','Oxford County','64','list'),
(3,'blue','Fraser Lake','64','list'),
(2,'red','San Marcello Pistoiese','64','list'),
(2,'green','Gembloux','64','list'),
(2,'green','Yeongcheon','64','list')
GO
WITH XMLNAMESPACES (default 'http://schemas.datacontract.org/2004/07/ACME.Domain.Core.ComplexTypess', 'http://www.w3.org/2001/XMLSchema-instance' as i )
SELECT
[sourceID]
,cast(stuff((
SELECT
[Description] as [Description]
,[Code] AS [Location/Code]
,[Location_Desc] AS [Location/Description]
FROM [myTable] mnbm
where mnbm.[sourceID] = p.[sourceID]
for xml path('stuff'), root ('arrayofstuff')
),1,0,'') as xml) as Ids
from [myTable] p
group by
p.[sourceID]
这是我目前输出的结果:
<arrayofstuff xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/ACME.Domain.Core.ComplexTypess">
<stuff>
<Description>commodo</Description>
<Location>San Marcello Pistoiese</Location>
</stuff>
<stuff>
<Description>ipsum</Description>
<Location>Gembloux</Location>
</stuff>
<stuff>
<Description>ipsum</Description>
<Location>Yeongcheon</Location>
</stuff>
</arrayofstuff>
【问题讨论】:
标签: sql-server xml tsql xquery