One method could be:
Split the string into the first char UPPER and the rest like so:
UPPER(LEFT(string)) + RIGHT(string, LEN(string) - 1)
Then replace any space followed by a letter with the upper case of it such as:
REPLACE(string, ' a', ' A')
Combining the above, you can do this:
SELECT
UPPER(LEFT('have a great day')) +
REPLACE((((((((((((((((((((((((((
RIGHT('have a great day', LEN('have a great day') - 1)
, ' a', ' A'), ' b', ' B'), ' c', ' C')
, ' d', ' D'), ' e', ' E'), ' f', ' F')
, ' g', ' G'), ' h', ' H'), ' i', ' I')
, ' j', ' J'), ' k', ' K'), ' l', ' L')
, ' m', ' M'), ' n', ' N'), ' o', ' O')
, ' p', ' P'), ' q', ' Q'), ' r', ' R')
, ' s', ' S'), ' t', ' T'), ' u', ' U')
, ' v', ' V'), ' w', ' W'), ' x', ' X')
, ' y', ' Y'), ' z', ' Z')
Might need some tweaking since I haven't actually tested it