Reputation: 1910
I am trying to use BizTalk adapter (SQL or WCF-SQL) to create a multilevel hierarchical schema. My query is like this
SELECT
CustomerQueueMessage.customer_queue_ID AS CustomerQueueMsgID,
CustomerMaster.customer_ID AS [CustomerID],
CustomerAddressType.address_type_ID AS [AddressTypeID],
CustomerSalesRep.sales_rep_type_code AS [SalesRepTypeCode]
FROM CustomerQueue AS CustomerQueueMessage
INNER JOIN dbo.MDM_Customer AS CustomerMaster ON (CustomerQueueMessage.customer_queue_ID = CustomerMaster.customer_queue_ID)
INNER JOIN dbo.MDM_CustomerAddressType AS CustomerAddressType ON (CustomerAddressType.customer_queue_ID = CustomerMaster.customer_queue_ID)
INNER JOIN dbo.MDM_CustomerSalesRep AS CustomerSalesRep ON (CustomerSalesRep.customer_queue_ID = CustomerMaster.customer_queue_ID)
FOR XML AUTO, TYPE, ELEMENTS, XMLDATA
When I generate the schema using SQL adapter I get this structure
what I want is
Table CustomerSalesRep is under CustomerAddressType. I want CustomerSalesRep to be at the same level with CustomerAddressType, both immediately under CustomerMaster.
If I remove the FOR XML statement and use WCF-SQL adapter to generate the schema, I get no hierarchy, all the columns are at the same level.
Any ideas? Preferably I would like to do it using WCF-SQL adapter, but also SQL would be OK.
Upvotes: 2
Views: 258
Reputation: 13393
You can use this.
SELECT
CustomerSalesRep.sales_rep_type_code AS "CustomerQueueMessage/CustomerMaster/CustomerSalesRep/SalesRepTypeCode",
CustomerAddressType.address_type_ID AS "CustomerQueueMessage/CustomerMaster/CustomerAddressType/AddressTypeID",
CustomerMaster.customer_ID AS "CustomerQueueMessage/CustomerMaster/CustomerID",
CustomerQueueMessage.customer_queue_ID AS "CustomerQueueMessage/CustomerQueueMsgID"
FROM CustomerQueue AS CustomerQueueMessage
INNER JOIN dbo.MDM_Customer AS CustomerMaster ON (CustomerQueueMessage.customer_queue_ID = CustomerMaster.customer_queue_ID)
INNER JOIN dbo.MDM_CustomerAddressType AS CustomerAddressType ON (CustomerAddressType.customer_queue_ID = CustomerMaster.customer_queue_ID)
INNER JOIN dbo.MDM_CustomerSalesRep AS CustomerSalesRep ON (CustomerSalesRep.customer_queue_ID = CustomerMaster.customer_queue_ID)
FOR XML PATH('SAPcustom'), TYPE, ELEMENTS
It generates an XML like this.
<SAPcustom>
<CustomerQueueMessage>
<CustomerMaster>
<CustomerSalesRep>
<SalesRepTypeCode>1</SalesRepTypeCode>
</CustomerSalesRep>
<CustomerAddressType>
<AddressTypeID>1</AddressTypeID>
</CustomerAddressType>
<CustomerID>1</CustomerID>
</CustomerMaster>
<CustomerQueueMsgID>1</CustomerQueueMsgID>
</CustomerQueueMessage>
</SAPcustom>
Upvotes: 1