• Here's an alternative:

    declare @children int

    set @children = 4

    SELECT

    string,

    STUFF(string, start_of_integer_value, CHARINDEX('<', string, start_of_integer_value) - start_of_integer_value,

    CAST(@children AS varchar(10)))

    FROM (

    SELECT '<key>Children</key><integer>2</integer>' AS string UNION ALL

    SELECT '<key>Children</key><integer>123</integer>' UNION ALL

    SELECT '<key>Children</key><integer></integer>'

    ) AS test_data

    CROSS APPLY (

    SELECT CHARINDEX('<integer>', string) + 9 AS start_of_integer_value

    ) AS assign_alias_name

    SQL DBA,SQL Server MVP(07, 08, 09) A socialist is someone who will give you the shirt off *someone else's* back.