2010-02-26 2 views
1

XML 및 네임 스페이스 조각이있는 FOR XML을 사용하여 SQL Server 2005/2008에 이상한 문제가 발생했습니다. 문제의 질문입니다.SQL Server에서 FOR XML을 사용하여 빈 네임 스페이스를 표시하지 않으려면

WITH XMLNAMESPACES ( 
DEFAULT 'http://tempuri.org/newincomingxml.xsd', 
'http://tempuri.org/newincomingxml.xsd' as [xsi], 
'http://tempuri.org/newincomingxml.xsd' as [a] 
) 
SELECT 
[@a:Source], [AddressCount], [ConsumerCount], [EmailCount], [PermissionCount] 
, (
    SELECT 
    [Consumer] 
    FROM tbcExportBRC_Current xmlmaster 
    FOR XML PATH(''), ROOT('Consumers'), TYPE 
) 
FROM tbcExportBRCBatch_Current xmlroot 
FOR XML PATH('Datafeed'), TYPE 

[고객] 필드는 XML 조각이다. 내가 이것을 실행할 때 나는 얻는다.

<Datafeed xmlns:a="http://tempuri.org/newincomingxml.xsd" xmlns:xsi="http://tempuri.org/newincomingxml.xsd" xmlns="http://tempuri.org/newincomingxml.xsd" a:Source="DSD"> 
    <AddressCount>0</AddressCount> 
    <ConsumerCount>0</ConsumerCount> 
    <EmailCount>0</EmailCount> 
    <PermissionCount>0</PermissionCount> 
    <Consumers xmlns:a="http://tempuri.org/newincomingxml.xsd" xmlns:xsi="http://tempuri.org/newincomingxml.xsd" xmlns="http://tempuri.org/newincomingxml.xsd"> 
    <Consumer> 
     <ConsumerType xmlns="">Individual</ConsumerType> 
     <FirstName xmlns="">STEVE</FirstName> 
     <LastName xmlns="">SMITH</LastName> 
    </Consumer> 
    </Consumers> 
</Datafeed> 

당신은 태그의 아이들이 의 xmlns = ""그들을 통지하는 경우. 표에서 직접 파편을 보면이 모양입니다.

 <ConsumerType>Individual</ConsumerType> 
     <FirstName>STEVE</FirstName> 
     <LastName>SMITH</LastName> 

나는 그것은에 xmlns = ""제거 기본 네임 스페이스

DEFAULT 'http://tempuri.org/newincomingxml.xsd', 

을 제거 할 수 있지만, 우리는 파일에 그것을 유지해야합니다. 어떤 아이디어?

답변

3

결과가 정확합니다. 테이블에는 네임 스페이스가없는 요소가 있으므로, xhamns = "http://tempuri.org/newincomingxml.xsd"의 기본 네임 스페이스가있는 Consumers 요소 아래에 요소를 추가하면 표 의 요소는이어야합니다 기본 네임 스페이스를 다시 ""로 덮어 씁니다.

정확하게보아야 할 내용입니다. xmlns = ""가 없으면 ConsumerType/FirstName/LastName 요소가 네임 스페이스 "http://tempuri.org/newincomingxml.xsd"에 있음을 의미합니다. 이는 false입니다.

아마도 ConsumerType/FirstName/LastName 요소를 "http://tempuri.org/newincomingxml.xsd"네임 스페이스로 이동하여 부모 Consumer 요소의 네임 스페이스와 일치시키는 것이 좋습니다.

+0

당신이 말하는 것을 이해합니다. 나는 소비자 칼럼에있는 조각이 옳지 않다는 것을 깨달았 기 때문에 원래 게시물을 편집하고 있습니다. 각 줄에 xmlns = "http://tempuri.org/newincomingxml.xsd"를 넣지 않고도 네임 스페이스가 속한 네임 스페이스를 어떻게 지정할 수 있습니까? –

+0

' ... ...' –