sql server 2005 create temporary table using xml parameter -
i want create temporary table xml input parameter. xml:
 <offices>         <group id="22807">             <office>185901</office>             <office>185902</office>             <office>185944</office>         </group>     </offices> this sql:
declare @groupsofficeids xml set @groupsofficeids = '<offices><group id="22807"><office>185901</office><office>185902</office><office>185944</office></group></offices>'  create table #groupofficeid (pk int primary key identity(1,1), idxml xml) insert #groupofficeid values (@groupsofficeids) select pk,  group.ref.value('@id', 'int') groupid,  group.ref.value('(office/text())[1]', 'varchar(20)') officeid #groupofficeid go cross apply go.idxml.nodes('/offices/group') group(ref)   this returns 1 row:
pk  groupid     officeid 1   22807       185901 i return following:
pk  groupid     officeid     1   22807       185901     2   22807       185902     3   22807       185944 is xml wrong or query? thanks!
update got little bit further... query this:
declare @groupsofficeids xml set @groupsofficeids = '<offices><group id="22807"><office>185901</office><office>185902</office><office>185944</office></group></offices>'  create table #groupofficeid (pk int primary key identity(1,1), idxml xml) insert #groupofficeid values (@groupsofficeids) select pk,  group.ref.value('@id', 'int') groupid,  office.ref.value('(office/text())[1]', 'varchar(20)') officeid #groupofficeid go cross apply go.idxml.nodes('/offices/group') group(ref)   cross apply go.idxml.nodes('/offices/group/office') office(ref) it produces this:
pk  groupid     officeid 1   22807       185901 1   22807       185902 1   22807       185944 why doesn't primary key increment 1?
you got same value pk because temp table stores 1 xml data in 1 row 1 pk, means data come same xml source have same primary key :
create table #groupofficeid (pk int primary key identity(1,1), idxml xml)                                 --  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^                                 --  here associate 1 xml data 1 identity id you may want alter temporary table structure store 1 groupid-officeid combination 1 row instead :
create table #groupofficeid (pk int primary key identity(1,1), groupid int, officeid int) then query insert (avoid using keyword go , group alias!) :
insert #groupofficeid(groupid,officeid) select     g.value('@id','int') groupid,     o.value('.','int') officeid @groupsofficeids.nodes('/offices/group') grp(g)      cross apply g.nodes('office') office(o) then select * #groupofficeid produce correct expected result :
pk  groupid     officeid 1   22807       185901 2   22807       185902 3   22807       185944 
Comments
Post a Comment