We help IT Professionals succeed at work.

SQL for XML format header and groups

216 Views
Last Modified: 2014-12-17
Hi there,
I'm creating a store procedure that returns simple data pertaining accounts.
What I need to is to format the xml output the following way:

<AccountNum>
    <AccountNum>000117622</AccountNum>
    <Name>                        </Name>
    <Address1>123 Man street      </Address1>
    <MTU>123</MTU>
    	<Port>1</Port>
    	<WaterConsumption4>30.00</WaterConsumption4>
    	<RunDate>2014-11-11T00:00:00</RunDate>
    </MTU>
    <MTU>345</MTU>
    	<Port>2</Port>
    	<WaterConsumption4>30.00</WaterConsumption4>
     	<RunDate>2014-11-11T00:00:00</RunDate>
    </MTU>
  </AccountNum>

Open in new window


here is the store procedure:
alter procedure usp_Summation360Consumption
as 
begin 
SELECT top 100 [AccountNum]
      ,[MTU]
      ,[Port]
      ,[WaterConsumption4]
      ,[Name]
      ,[Address1]
      ,[CutOffdt]
      ,[RunDate]
  FROM Consumption360
--  where AccountNum = '000112182'
for xml path ('AccountNum'), root('Account'), type
  end

Open in new window


How can I modify the procedure to get the output I need?
Thanks,
COHFL
Comment
Watch Question

Director, Practice Manager and Computing Consultant
Awarded 2014
Top Expert 2014
Commented:
This one is on us!
(Get your first solution completely free - no credit card required)
UNLOCK SOLUTION

Author

Commented:
not quite there yet!

maybe syntax wise was not accurate but here is what im trying:
SELECT [AccountNum]
      ,[Name]
      ,[Address1]
	  (SELECT [MTU]
			  ,[Port]
			  ,[WaterConsumption4]
			  ,[RunDate]
		  FROM Consumption360
		  where AccountNum = '000100226'
		  order by [MTU], [PORT]
		for xml path ('MTU'), root('METER'), type
		)
  FROM Consumption360
  where AccountNum = '000100226'
  for xml path ('AccountNum'), root('ACCOUNT'), type

Open in new window


the idea is that the account info is wrap around on the top and each MTU after but under the same Account

Author

Commented:
but yet im getting and error that reads

Msg 156, Level 15, State 1, Line 10
Incorrect syntax near the keyword 'order'.

Just comment that out to see if it work then complaints on the next line =(
Phillip BurtonDirector, Practice Manager and Computing Consultant
Awarded 2014
Top Expert 2014

Commented:
You are missing a comma at the end of line 3.
Phillip BurtonDirector, Practice Manager and Computing Consultant
Awarded 2014
Top Expert 2014

Commented:
If you can't get it quite right, I suggest posting the structure of the table and some sample data. But how close are you now?

Author

Commented:
yeah I just notice that =( thanks to point it out.
After I fix that little error on my part I get another error:
Unable to show XML. The following error happened:
Unexpected end of file has occurred. The following elements are not closed: RunDate, MTU, METER, AccountNum, ACCOUNT. Line 1, position 2097154

One solution is to increase the number of characters retrieved from the server for XML data. To change this setting, on the Tools menu, click Options.

I did that and pick the unlimited characters for XML and still does not work =(
Phillip BurtonDirector, Practice Manager and Computing Consultant
Awarded 2014
Top Expert 2014

Commented:
Have you tried my version? How close is that to what you want?

Author

Commented:
Phil, I have try your version but it does not break on every MTU and repeats the account number on each entry. Im trying to format the output to break on each account but at the same time break on each MTU
Phillip BurtonDirector, Practice Manager and Computing Consultant
Awarded 2014
Top Expert 2014

Commented:
I suggest posting the structure of the table and some sample data. Any other experts want to help?
Unlock the solution to this question.
Join our community and discover your potential

Experts Exchange is the only place where you can interact directly with leading experts in the technology field. Become a member today and access the collective knowledge of thousands of technology experts.

*This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

OR

Please enter a first name

Please enter a last name

8+ characters (letters, numbers, and a symbol)

By clicking, you agree to the Terms of Use and Privacy Policy.