How to get all messages raised when a statement fails
This is expected behavior with TRY/CATCH in T-SQL.  The related Connect bug report was closed as "won't fix": 

You'll need to use a client application (e.g. SQLCMD, PowerShell) to capture all error messages.