Please start any new threads on our new
site at https://forums.sqlteam.com. We've got lots of great SQL Server
experts to answer whatever question you can come up with.
| Author |
Topic |
|
maevr
Posting Yak Master
169 Posts |
Posted - 2008-10-14 : 05:27:10
|
| I need to split this xml sample into separate tables (IdByggnadRad and IdAdressRad) with keys so that I can connect them to each other using primary key and foreign keys.IdByggnadRad can contain multiple instances and IdAdressRad can contain multiple instances.The xml has a primary key tag named deklid that is unique for the whole xml document. <my:IdByggnadRad> <my:IdHusnr>1</my:IdHusnr> <my:IdById>757114</my:IdById> <my:IdAdress> <my:IdAdressRad> <my:IdAdr>Scheffersgatan a1</my:IdAdr> <my:IdPostnr>11258</my:IdPostnr> <my:IdPostort>Stockholm</my:IdPostort> </my:IdAdressRad> <my:IdAdressRad> <my:IdAdr>Svedbergsplan a2</my:IdAdr> <my:IdPostnr>11258</my:IdPostnr> <my:IdPostort>Stockholm</my:IdPostort> </my:IdAdressRad> <my:IdAdressRad> <my:IdAdr>Svedbergsplan a3</my:IdAdr> <my:IdPostnr>11258</my:IdPostnr> <my:IdPostort>Stockholm</my:IdPostort> </my:IdAdressRad> <my:IdAdressRad> <my:IdAdr>Wennerbergsgatan a4</my:IdAdr> <my:IdPostnr>11258</my:IdPostnr> <my:IdPostort>Stockholm</my:IdPostort> </my:IdAdressRad> </my:IdAdress> </my:IdByggnadRad> <my:IdByggnadRad> <my:IdHusnr>2</my:IdHusnr> <my:IdById>794655</my:IdById> <my:IdAdress> <my:IdAdressRad> <my:IdAdr>Scheffersgatan x1</my:IdAdr> <my:IdPostnr>11258</my:IdPostnr> <my:IdPostort>Stockholm</my:IdPostort> </my:IdAdressRad> <my:IdAdressRad> <my:IdAdr>Wennerbergsgatan x2</my:IdAdr> <my:IdPostnr>11258</my:IdPostnr> <my:IdPostort>Stockholm</my:IdPostort> </my:IdAdressRad> <my:IdAdressRad> <my:IdAdr>Wennerbergsgatan x3</my:IdAdr> <my:IdPostnr>11258</my:IdPostnr> <my:IdPostort>Stockholm</my:IdPostort> </my:IdAdressRad> </my:IdAdress> </my:IdByggnadRad>How can I do this, Im currently using the code below to split the xml but it does not work with the new version of the xml document using sublevels on IdAdressRad.------------------------------------------CREATE VIEW [dbo].[DeklIdByggnadXml] ASWITH XMLNAMESPACES('http://schemas.microsoft.com/office/infopath/2003/myXSD/2007-01-15T13:29:33' AS my)SELECT DeklId, TempTabell.TempKolumn.query('.') AS IdByggnadRadFROM TMP_MinaDeklCROSS APPLY FormData.nodes('/my:Energideklaration/my:Formular/my:IdByggnad/my:IdByggnadRad')AS TempTabell(TempKolumn)------------------------------------------------------------------------------------ALTER PROCEDURE [dbo].[usp_InsertTmpIdByggnad]ASWITH xmlnamespaces('http://schemas.microsoft.com/office/infopath/2003/myXSD/2007-01-15T13:29:33' AS my)INSERT INTO TMP_BYGGNAD(deklId, IdHusnr, IdPrefixById, IdById, IdXkoordinat, IdYkoordinat, IdAdress, IdPostnr, IdPostort, Antal)SELECT DeklId,IdByggnadRad.value('(/my:IdByggnadRad/my:IdHusnr)[1]', 'varchar(4)') AS IdHusnr,IdByggnadRad.value('(/my:IdByggnadRad/my:IdPrefixById)[1]', 'varchar(4)') AS IdPrefixById ,IdByggnadRad.value('(/my:IdByggnadRad/my:IdById)[1]', 'varchar(10)') AS IdById ,IdByggnadRad.value('(/my:IdByggnadRad/my:IdXkoordinat)[1]', 'varchar(11)') AS IdXkoordinat ,IdByggnadRad.value('(/my:IdByggnadRad/my:IdYkoordinat)[1]', 'varchar(11)') AS IdYkoordinat ,IdByggnadRad.value('(/my:IdByggnadRad/my:IdAdress)[1]', 'varchar(35)') AS IdAdress,IdByggnadRad.value('(/my:IdByggnadRad/my:IdPostnr)[1]', 'varchar(10)') AS IdPostnr,IdByggnadRad.value('(/my:IdByggnadRad/my:IdPostort)[1]', 'varchar(27)') AS IdPostort,1FROM dbo.DeklIdByggnadXml------------------------------------------ |
|
|
SwePeso
Patron Saint of Lost Yaks
30421 Posts |
Posted - 2008-11-04 : 15:56:07
|
[code]DECLARE @xml XMLSET @xml = '<Deklid> <IdByggnadRad> <IdHusnr>1</IdHusnr> <IdById>757114</IdById> <IdAdress> <IdAdressRad> <IdAdr>Scheffersgatan a1</IdAdr> <IdPostnr>11258</IdPostnr> <IdPostort>Stockholm</IdPostort> </IdAdressRad> <IdAdressRad> <IdAdr>Svedbergsplan a2</IdAdr> <IdPostnr>11258</IdPostnr> <IdPostort>Stockholm</IdPostort> </IdAdressRad> <IdAdressRad> <IdAdr>Svedbergsplan a3</IdAdr> <IdPostnr>11258</IdPostnr> <IdPostort>Stockholm</IdPostort> </IdAdressRad> <IdAdressRad> <IdAdr>Wennerbergsgatan a4</IdAdr> <IdPostnr>11258</IdPostnr> <IdPostort>Stockholm</IdPostort> </IdAdressRad> </IdAdress> </IdByggnadRad> <IdByggnadRad> <IdHusnr>2</IdHusnr> <IdById>794655</IdById> <IdAdress> <IdAdressRad> <IdAdr>Scheffersgatan x1</IdAdr> <IdPostnr>11258</IdPostnr> <IdPostort>Stockholm</IdPostort> </IdAdressRad> <IdAdressRad> <IdAdr>Wennerbergsgatan x2</IdAdr> <IdPostnr>11258</IdPostnr> <IdPostort>Stockholm</IdPostort> </IdAdressRad> <IdAdressRad> <IdAdr>Wennerbergsgatan x3</IdAdr> <IdPostnr>11258</IdPostnr> <IdPostort>Stockholm</IdPostort> </IdAdressRad> </IdAdress> </IdByggnadRad> </Deklid>'SELECT t.c.value('IdHusnr[1]', 'varchar(4)') AS IdHusnr, t.c.value('IdById[1]', 'varchar(10)') AS IdById, p.l.value('IdAdr[1]', 'varchar(35)') AS IdAdr, p.l.value('IdPostnr[1]', 'varchar(10)') AS IdPostnr, p.l.value('IdPostort[1]', 'varchar(27)') AS IdPostortFROM @xml.nodes('/Deklid/IdByggnadRad') AS t(c)CROSS APPLY t.c.nodes('IdAdress/IdAdressRad') AS p(l)[/code] E 12°55'05.63"N 56°04'39.26" |
 |
|
|
|
|
|
|
|