2012-03-29 5 views
0

次のSQLでは、2行を生成して、個々のsoapエンベロープでラップしています。FOR XML PATHを使用する場合、列エイリアスの最大長128を解決するにはどうすればよいですか?

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> 

しかし、< N3 XML列のために:私は単に

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 

として上記のクエリのSELECT一部を変更してIsAuthorizedForUse>そして、私はこのエラーを取得する:IsAuth>、私は単語全体< N3を使用したい

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 

開始時の場所これを、これはSQL Serverのエラーです

0

私の問題を解決しました。列名には128文字の制限があります。