Good points about the Unicode and datetimeoffset (I've never personally used that data type):
-- list column data type, including len(s), if applicable
CASE WHEN c.is_computed = 1 THEN 'AS ' +
(SELECT definition FROM sys.computed_columns cc WHERE cc.object_id = c.object_id AND cc.column_id = c.column_id) +
CASE WHEN c.is_nullable = 0 THEN ' NOT NULL' ELSE '' END
ELSE t.name + CASE
WHEN t.name LIKE '%n%char%' THEN
'(' + CASE WHEN c.max_length = -1 THEN 'MAX' ELSE CAST(c.max_length / 2 AS varchar(10)) + ')' END
WHEN t.name LIKE '%bin%' OR t.name LIKE '%char%' THEN
'(' + CASE WHEN c.max_length = -1 THEN 'MAX' ELSE CAST(c.max_length AS varchar(10)) + ')' END
WHEN t.name IN ('datetime2', 'time', 'timeoffset') THEN
'(' + CAST(c.scale AS varchar(3)) + ')'
WHEN t.name IN ('decimal', 'numeric') THEN
'(' + CAST(c.precision AS varchar(3)) + ', ' + CAST(c.scale AS varchar(3)) + ')'
WHEN t.name IN ('float', 'real') THEN
'(' + CAST(c.precision AS varchar(3)) + ')'
ELSE '' END +
CASE WHEN c.is_nullable = 0 THEN ' NOT' ELSE '' END + ' NULL'
END
SQL DBA,SQL Server MVP(07, 08, 09) "It's a dog-eat-dog world, and I'm wearing Milk-Bone underwear." "Norm", on "Cheers". Also from "Cheers", from "Carla": "You need to know 3 things about Tortelli men: Tortelli men draw women like flies; Tortelli men treat women like flies; Tortelli men's brains are in their flies".