March 12, 2013 at 7:22 am
Trying to get the hang of querying to XML.
Although I can get the result I'm looking for, I'm not sure if it's the recommended way.
Here's all the test code.
/*
CREATE TABLE Customers
(
CustID TinyInt Identity(1,1) NOT NULL,
Name Varchar(30) NOT NULL,
Address1 Varchar(50) NOT NULL,
Address2 Varchar(50) NOT NULL,
Postcode Varchar(10) NOT NULL,
Country TinyInt NOT NULL,
CustGrpID TinyInt NOT NULL
)
CREATE TABLE CustomerGroups
(
CustGrpID TinyInt IDENTITY(1,1) NOT NULL,
Name Varchar(20) NOT NULL
)
INSERTCustomers
(Name, Address1, Address2, Postcode, Country, CustGrpID)
SELECT'Cust_One', 'Far', 'Far away', '90210', 255, 1UNION ALL
SELECT'Cust_Two', 'Very', 'Very close', '5060', 1, 2UNION ALL
SELECT'Cust_Three', 'Right', 'Next door', '4321', 1, 1UNION ALL
SELECT'Cust_Four', 'Middle', 'Of nowhere', '666', 127, 2
INSERTCustomerGroups
(Name)
SELECT'Good' UNION ALL
SELECT'Bad'
*/
-- Works but the syntax doesn't look "Correct". Shouldn't have to CAST.
SELECTCG.CustGrpID"@CustGrpID",
CG.Name"@CustGrpName"
,CAST((
SELECTC.CustID"@CustID",
C.Name"@CustName",
C.Address1"Address1",
C.Address2"Address2"
FROMCustomers C
WHEREC.CustGrpID = CG.CustGrpID
FORXML PATH ('Customer'))
AS XML) --CustList --Gives an extra element
FROMCustomerGroups CG
FORXML PATH ('CustomerGroup'), ROOT('CustomersPerCustomerGroup')
How should this be written?
Thanks,
March 12, 2013 at 7:57 am
Rather than using a cast, replace
FORXML PATH ('Customer'))
with
FORXML PATH ('Customer'),TYPE)
____________________________________________________
Deja View - The strange feeling that somewhere, sometime you've optimised this query before
How to get the best help on a forum
http://www.sqlservercentral.com/articles/Best+Practices/61537March 15, 2013 at 1:22 am
Viewing 3 posts - 1 through 3 (of 3 total)
You must be logged in to reply to this topic. Login to reply
This website stores cookies on your computer.
These cookies are used to improve your website experience and provide more personalized services to you, both on this website and through other media.
To find out more about the cookies we use, see our Privacy Policy