• I would approach that more like this:

    DECLARE @xml XML

    SET @xml = (

    SELECT

    (

    SELECT

    'ZID' AS "@_Name",

    '789' AS "@_Value",

    'ZID' AS "@_ID"

    FOR XML PATH('KEY'), TYPE

    ),

    (

    SELECT

    ZLN,

    ZTLA,

    ZMR,

    ZCLS,

    ZPITIP

    FROM #ZDL ZL

    FOR XML AUTO, ELEMENTS, TYPE

    ),

    (

    SELECT

    ZBN,

    ZFN,

    ISNULL(ZMN,'') AS ZMN,

    ZLL

    FROM #ZBL ZB

    FOR XML AUTO, ELEMENTS, TYPE

    ) AS ZBS,

    (

    SELECT

    ZSN,

    ZCE

    FROM #ZCC ZC

    FOR XML AUTO, ELEMENTS, TYPE

    ) AS ZCC,

    (

    SELECT

    ZPT,

    ZPP,

    ZNU

    FROM #ZP ZL

    FOR XML AUTO, ELEMENTS, TYPE

    )

    FOR XML PATH(''), ELEMENTS, ROOT('TEST_DATA')

    )

    -- Fix up the header; NVARCHAR hack

    SET @xml = REPLACE( CAST( @xml AS NVARCHAR(MAX) ), '<TEST_DATA>', '<TEST_DATA xmlns="http://www.TestData.com/Schema/Test">' )

    SELECT @xml x