• Eirikur Eiriksson (11/18/2014)


    Quick solution which uses a recursive CTE, should be enough to get you passed this hurdle

    😎

    USE tempdb;

    GO

    SET NOCOUNT ON;

    DECLARE @TXML XML =

    '<SecureEvent EDate="08/04/2011" ID="47854303" InternalSecureEventID="154472406">

    <SecureEventDate>08/04/2011</SecureEventDate>

    <TimestampCreate>08/04/2011 00:00:00:000</TimestampCreate>

    <WatchActionKey Word="N">Does not affect aging clock</WatchActionKey>

    <Palung Word="UN">Unassigned, Palung</Palung>

    <SecureBPalung Word="CONV">Conversion - B Palung</SecureBPalung>

    <Secure ActionID="2948979" ActionReviewID="7013201" InternalActionID="6822517" InternalReviewID="24653683">

    <SecureType Word="PLGY">OK</SecureType>

    </Secure>

    <SecureEvent EDate="07/11/2011" ID="47854302" InternalSecureEventID="154472405">

    <SecureEventDate>07/11/2011</SecureEventDate>

    <TimestampCreate>07/11/2011 00:00:00:000</TimestampCreate>

    <WatchActionKey Word="N">Does not affect </WatchActionKey>

    <Palung Word="UN">Unassigned, Palung</Palung>

    <Secure ActionID="2948979" ActionReviewID="7013200" InternalActionID="6822517" InternalReviewID="24653682">

    <SecureType Word="PLNG">Not OK</SecureType>

    </Secure>

    <SecureEvent EDate="09/08/2011" ID="47854302" InternalSecureEventID="154472405">

    <SecureEventDate>07/11/2011</SecureEventDate>

    <TimestampCreate>07/11/2011 00:00:00:000</TimestampCreate>

    <WatchActionKey Word="N">Does not affect </WatchActionKey>

    <Palung Word="UN">Unassigned, Palung</Palung>

    <Secure ActionID="454455" ActionReviewID="25356" InternalActionID="6822517" InternalReviewID="34234343">

    <SecureType Word="PLNG">Not OK</SecureType>

    </Secure>

    </SecureEvent>

    <SecureEvent EDate="09/08/2011" ID="47854303" InternalSecureEventID="154472406">

    <SecureEventDate>07/11/2011</SecureEventDate>

    <TimestampCreate>07/11/2011 00:00:00:000</TimestampCreate>

    <WatchActionKey Word="N">Does not affect </WatchActionKey>

    <Palung Word="UN">Unassigned, Palung</Palung>

    <Secure ActionID="454455" ActionReviewID="25356" InternalActionID="6822517" InternalReviewID="34234343">

    <SecureType Word="PLNG">Not OK</SecureType>

    </Secure>

    </SecureEvent>

    </SecureEvent>

    </SecureEvent>';

    ;WITH XML_SOURCE AS

    (

    SELECT

    CONVERT(INT,1,0) AS XS_ID

    ,@TXML AS XS_XML

    )

    ,BASE_XML AS

    (

    SELECT

    1 AS LEVEL_NO

    ,0 AS PARTENT_LEVEL_NO

    ,XPLAN.DATA.value('local-name(.)','VARCHAR(1024)') AS NODE_NAME

    ,XPLAN.DATA.query('.') AS NODE_XML

    ,XPLAN.DATA.query('SecureEvent') AS SUB_NODE_XML

    FROM XML_SOURCE RP OUTER APPLY

    RP.XS_XML.nodes('*') AS XPLAN(DATA)

    UNION ALL

    SELECT

    BX.LEVEL_NO + 1 AS LEVEL_NO

    ,BX.LEVEL_NO AS PARTENT_LEVEL_NO

    ,XPLAN.DATA.value('local-name(.)','VARCHAR(1024)') AS NODE_NAME

    ,XPLAN.DATA.query('.') AS NODE_XML

    ,XPLAN.DATA.query('SecureEvent') AS SUB_NODE_XML

    FROM BASE_XML BX

    OUTER APPLY BX.SUB_NODE_XML.nodes('*') AS XPLAN(DATA)

    WHERE XPLAN.DATA.query('.') IS NOT NULL

    )

    ,BASE_ELEMENTS AS

    (

    SELECT

    BX.LEVEL_NO

    ,BX.PARTENT_LEVEL_NO

    ,ROW_NUMBER() OVER

    (

    PARTITION BY BX.LEVEL_NO

    ORDER BY (SELECT NULL)

    ) AS LEVEL_RID

    ,NODE_NAME

    ,NODE_XML

    FROM BASE_XML BX

    )

    SELECT

    BE.LEVEL_NO

    ,BE.PARTENT_LEVEL_NO

    ,BE.LEVEL_RID

    ,BE.NODE_NAME

    ,BASE.DATA.value('@EDate' ,'DATE') AS EDate

    ,BASE.DATA.value('@ID' ,'BIGINT') AS ID

    ,BASE.DATA.value('@InternalSecureEventID' ,'BIGINT') AS InternalSecureEventID

    ,BASE.DATA.value('SecureEventDate[1]' ,'DATE') AS SecureEventDate

    ,BASE.DATA.value('TimestampCreate[1]' ,'DATETIME') AS TimestampCreate

    ,BASE.DATA.value('WatchActionKey[1]' ,'NVARCHAR(100)') AS WatchActionKey

    ,BASE.DATA.value('WatchActionKey[1]/@Word' ,'NVARCHAR(20)') AS WatchActionKey_Word

    ,BASE.DATA.value('Palung[1]' ,'NVARCHAR(100)') AS Palung

    ,BASE.DATA.value('Palung[1]/@Word' ,'NVARCHAR(20)') AS Palung_Word

    ,BASE.DATA.value('Secure[1]' ,'NVARCHAR(100)') AS Secure

    ,BASE.DATA.value('Secure[1]/@ActionID' ,'BIGINT') AS Secure_ActionID

    ,BASE.DATA.value('Secure[1]/@ActionReviewID' ,'BIGINT') AS Secure_ActionReviewID

    ,BASE.DATA.value('Secure[1]/@InternalActionID','BIGINT') AS Secure_InternalActionID

    ,BASE.DATA.value('Secure[1]/@InternalReviewID','BIGINT') AS Secure_InternalReviewID

    ,SECURE.DATA.value('@Word' ,'NVARCHAR(20)') AS SecureType_Word

    ,SECURE.DATA.value('.[1]' ,'NVARCHAR(100)') AS SecureType

    FROM BASE_ELEMENTS BE

    OUTER APPLY BE.NODE_XML.nodes('*') AS BASE(DATA)

    OUTER APPLY BASE.DATA.nodes('Secure/SecureType') AS SECURE(DATA);

    Results

    LEVEL_NO PARTENT_LEVEL_NO LEVEL_RID NODE_NAME EDate ID InternalSecureEventID SecureEventDate TimestampCreate WatchActionKey WatchActionKey_Word Palung Palung_Word Secure Secure_ActionID Secure_ActionReviewID Secure_InternalActionID Secure_InternalReviewID SecureType_Word SecureType

    --------- ---------------- ---------- ------------- ---------- --------- --------------------- --------------- ----------------------- ---------------------------- -------------------- -------------------- ------------ --------- ---------------- --------------------- ----------------------- ----------------------- ---------------- ----------

    1 0 1 SecureEvent 2011-08-04 47854303 154472406 2011-08-04 2011-08-04 00:00:00.000 Does not affect aging clock N Unassigned, Palung UN OK 2948979 7013201 6822517 24653683 PLGY OK

    2 1 1 SecureEvent 2011-07-11 47854302 154472405 2011-07-11 2011-07-11 00:00:00.000 Does not affect N Unassigned, Palung UN Not OK 2948979 7013200 6822517 24653682 PLNG Not OK

    3 2 1 SecureEvent 2011-09-08 47854302 154472405 2011-07-11 2011-07-11 00:00:00.000 Does not affect N Unassigned, Palung UN Not OK 454455 25356 6822517 34234343 PLNG Not OK

    3 2 2 SecureEvent 2011-09-08 47854303 154472406 2011-07-11 2011-07-11 00:00:00.000 Does not affect N Unassigned, Palung UN Not OK 454455 25356 6822517 34234343 PLNG Not OK

    Thanks Eririkur. This certainly gives me a good direction. What if there were multiple secures within a SecurEvent?