Hey! Not sure if you still care, or if this is what you are looking for, but here it is anyway 🙂
This assumes you know the root element name. You can store output in temp tables or table variables and process it any way you want.
DECLARE @idoc INT
DECLARE @exml XML
DECLARE @Root VARCHAR(64)
SET @Root = '/YourRootName'
SELECT @exml = [YourXMLColumn] FROM YourTable
EXEC sp_xml_preparedocument @idoc OUTPUT, @exml
select
columnNames.id,
columnNames.localname AS ELEMENT,
columnValue.text AS VALUE
FROM OPENXML (@idoc, @Root) columnNames
cross apply (select text FROM OPENXML (@idoc, @Root)
where nodetype = 3 AND parentid = columnNames.id) columnValue
where columnNames.nodetype <> 3 and columnNames.localname not in ('xsi','xsd')
Exec sp_xml_removedocument @idoc