I know that answer is accepted, but there is actually simplier way of doing it, if the only thing you need to do is select node value. Just use *
as namespace name:
SELECT MessageXml
, MessageXml.value('(/*:Envelope/*:Body/*:FetchRequest/*:Contract/*:TransactionId)[1]'
, 'varchar(max)')
FROM dbo.Message