Skip to content Skip to sidebar Skip to footer

Querying An Xml List In Sql Server Using Xquery

I have a table in SQL server that is used to store submitted form data. The form fields for each submission are dynamic so the collected data is stored as name value pairs in an XM

Solution 1:

Is this what you want?

select
  id,
  [user_id],
  datestamp,
  f.i.value('itemKey[1]', 'varchar(50)') as itemKey,
  f.i.value('itemValue[1]', 'varchar(50)') as itemValue
from YourTable as T
  cross apply T.formdata.nodes('/formfields/item') asf(i)

Test:

declare @T table
(
  id int,
  user_id int,
  datestamp datetime,
  formdata xml
)

insert into @T (id, user_id, datestamp, formdata)
values (1, 1, getdate(),
'<formfields><item><itemKey>USER_NAME</itemKey><itemValue>test</itemValue></item><item><itemKey>value2</itemKey><itemValue>test</itemValue></item><item><itemKey>MYID</itemKey><itemValue>5468512</itemValue></item><item><itemKey>testcheckbox</itemKey><itemValue>item1,item3</itemValue></item><item><itemKey>samplevalue</itemKey><itemValue>item3</itemValue></item><item><itemKey>accept_terms</itemKey><itemValue>True</itemValue></item></formfields>
'
)

select
  id,
  [user_id],
  datestamp,
  f.i.value('itemKey[1]', 'varchar(50)') as itemKey,
  f.i.value('itemValue[1]', 'varchar(50)') as itemValue
from @T as T
  cross apply T.formdata.nodes('/formfields/item') as f(i)

Result:

iduser_iddatestampitemKeyitemValue112011-05-23 15:38:55.673  USER_NAMEtest112011-05-23 15:38:55.673  value2test112011-05-23 15:38:55.673  MYID5468512112011-05-23 15:38:55.673  testcheckboxitem1,item3112011-05-23 15:38:55.673  samplevalueitem3112011-05-23 15:38:55.673  accept_termsTrue

Post a Comment for "Querying An Xml List In Sql Server Using Xquery"