With the following SQL, I am generating 2 rows and wrapping them in individual soap envelopes.
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
)
select @XmlDoc
the output looks like this:
<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>
However, for the xml column < N3:IsAuth >, I want to use the whole word < N3:IsAuthorizedForUse > so I simply changed SELECT part of above query as
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
And I get this error:
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.
Any way to solve this? The xml namespaces, element names and hierarchy cannot be changed unfortunately. Thanks!
place this at the starting it solved my problem
This is a sql server error. There is a limit of 128 characters for column names.