2012-03-29 1 views
0

Со следующим SQL я генерирую 2 строки и обертываю их в отдельные конверты с мылом.Как разрешить максимальную длину 128 на псевдониме столбца при использовании FOR XML PATH?

declare @XmlDoc xml 
;with XMLNAMESPACES 
(
    'http://schemas.xmlsoap.org/soap/envelope/' as soapenv, 
    'http://amsa.com/contract/baserequestcontract/v1.0' as H1, 
    'http://MyCompany.org/contract/mrmPerson/v1.0' as N1, 
    'http://MyCompany.org/contracts/person' as N2, 
    'http://MyCompany.org/contracts/demogTypes' as N3 

)

select @XmlDoc = 
(
    select 
    top 2 
    PersonID as 'soapenv:Header/H1:PersonID', 
    IsAuthorizedForUse as 'soapenv:Body/N1:SaveMRMPersonRequest/N1:Person/N2:PersonTier2/N2:AddressArray/N2:Address/N3:CommonDemogInfo/N3:IsAuth' 
    from 
    dbo.PersonDemogAddress 
    for xml 
    path ('soapenv:Envelope'), 
    root ('root'), 
    type, 
    elements xsinil 

)
выберите @XmlDoc

выход выглядит следующим образом:

<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:N3="http://MyCompany.org/contracts/demogTypes" 
    xmlns:N2="http://MyCompany.org/contracts/person" 
    xmlns:N1="http://MyCompany.org/contract/mrmPerson/v1.0" 
    xmlns:H1="http://amsa.com/contract/baserequestcontract/v1.0" 
    xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> 
<soapenv:Envelope> 
<soapenv:Header> 
    <H1:PersonID>1</H1:PersonID> 
</soapenv:Header> 
<soapenv:Body> 
    <N1:SaveMRMPersonRequest> 
    <N1:Person> 
     <N2:PersonTier2> 
     <N2:AddressArray> 
      <N2:Address> 
      <N3:CommonDemogInfo> 
       <N3:IsAuth>Y</N3:IsAuth> 
      </N3:CommonDemogInfo> 
      </N2:Address> 
     </N2:AddressArray> 
     </N2:PersonTier2> 
    </N1:Person> 
    </N1:SaveMRMPersonRequest> 
</soapenv:Body> 
</soapenv:Envelope> 
<soapenv:Envelope> 
<soapenv:Header> 
    <H1:PersonID>8</H1:PersonID> 
</soapenv:Header> 
<soapenv:Body> 
    <N1:SaveMRMPersonRequest> 
    <N1:Person> 
     <N2:PersonTier2> 
     <N2:AddressArray> 
      <N2:Address> 
      <N3:CommonDemogInfo> 
       <N3:IsAuth>Y</N3:IsAuth> 
      </N3:CommonDemogInfo> 
      </N2:Address> 
     </N2:AddressArray> 
     </N2:PersonTier2> 
    </N1:Person> 
    </N1:SaveMRMPersonRequest> 
</soapenv:Body> 

Однако для столбца XML < N3: IsAuth>, я хочу использовать слово целиком < N3: IsAuthorizedForUse> так что я просто изменил ВЫБЕРИТЕ часть выше запроса в

select 
    top 2 
    PersonID as 'soapenv:Header/H1:PersonID', 
    IsAuthorizedForUse as 'soapenv:Body/N1:SaveMRMPersonRequest/N1:Person/N2:PersonTier2/N2:AddressArray/N2:Address/N3:CommonDemogInfo/N3:IsAuthorizedForUse 

И я получаю эту ошибку:

Msg 103, Level 15, State 4, Line 16 
The identifier that starts with 'soapenv:Body/N1:SaveMRMPersonRequest/N1:Person/N2:PersonTier2/N2:AddressArray/N2:Address/N3:CommonDemogInfo/N3:IsAuthorizedForUse' is too long. Maximum length is 128. 

Любой способ решить эту проблему? К сожалению, имена и пространства имен xml не могут быть изменены. Благодаря!

ответ

1
SET QUOTED_IDENTIFIER OFF 
SET ANSI_NULLS ON 

месту это в исходное это решить мою проблему

0

Это ошибка SQL Server. Для имен столбцов существует ограничение в 128 символов.

 Смежные вопросы

  • Нет связанных вопросов^_^