Thanks Bevan and John for the explanation.
I had a chance to use it in a real scenario today but I hit a snag with Null values. At some point the code evaluates something like:...CAST( ISNULL( [COLUMN], '' ) AS char(37) ) ...
The trouble arises if COLUMN value is Null. If COLUMN is a uniqueidentifer (but Null) then the ISNULL substitution fails because the string '' cannot be converted to uniqueidentifer. Adding another cast can fix this, albeit not very elegantly:
CAST( ISNULL( CAST([COLUMN] AS varchar(max)) , '' ) AS char(37) )
At least, that's what I did. A more difficult problem is if a date type is Null. The empty string can be converted to a date, but it becomes zero which in the old date types is Jan 1 1900. So Null date columns appear as Jan 1 1900 or parts thereof depending on the column width. I didn't have any Null date values in my sample so I didn't tackle this.
After that first small change the output was just what I wanted.
And more grist to the ASCII supporters' mill! In recent months I've seen code for representing output as (a) a CEEFAX (Teletext) screen, and (b) a Solari airport-style mechanical display.