이 형식의 SQL Server에서 XML을 작성해야합니다. 첫 번째 줄에 두 개의 XMLNAMESPACES가 있지만 위치 옆에 세 번째 줄이 있습니다.
<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>
xmlns:d3p1="http://schemas.datacontract.org/2004/07/ACME.Infrastructure.CodeValues"
Location 요소에 나타나야하는 특별한 이유 가 있습니까? 네임 스페이스는 참조되기 전에 정의 되기만하면 XML 문서의 어느 위치에서나 정의 할 수 있으므로 루트 요소에서의 일부로 정의 할 수 있습니다 WITH XMLNAMESPACES
. 예 :
drop table if exists dbo.myTable;
create table dbo.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)
);
insert into dbo.myTable (sourceID,[Description],[Location],Code,Location_Desc)
values (1, 'blue', 'Somewhere', '64', 'Balloons');
with xmlnamespaces (
default 'http://schemas.datacontract.org/2004/07/ACME.Domain.Core.ComplexTypess',
'http://schemas.datacontract.org/2004/07/ACME.Infrastructure.CodeValues' as d3p1,
'http://www.w3.org/2001/XMLSchema-instance' as i )
select
[sourceID],
cast((
select
[Description],
Code as [Location/d3p1:Code],
Location_Desc as [Location/d3p1:Description]
from dbo.myTable mnbm
where mnbm.sourceID = p.sourceID
for xml path('stuff'), root('arrayofstuff')
) as xml) as Ids
from dbo.myTable p
group by p.sourceID;
결과 :
<arrayofstuff
xmlns:i="http://www.w3.org/2001/XMLSchema-instance"
xmlns:d3p1="http://schemas.datacontract.org/2004/07/ACME.Infrastructure.CodeValues"
xmlns="http://schemas.datacontract.org/2004/07/ACME.Domain.Core.ComplexTypess">
<stuff>
<Description>blue</Description>
<Location>
<d3p1:Code>64</d3p1:Code>
<d3p1:Description>Balloons</d3p1:Description>
</Location>
</stuff>
</arrayofstuff>
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다