something like this? also, max_length only makes sense for char types, so you mean like varchar/nvarchars right?
SELECT
OBJECT_NAME(OBJECT_ID) AS tablename,
name AS colName,
TYPE_NAME(system_type_id),
CASE
WHEN TYPE_NAME(system_type_id) IN ('NCHAR','NVARCHAR')
THEN max_length / 2
ELSE max_length
END AS MaxColLength
FROM sys.columns
WHERE TYPE_NAME(system_type_id) IN ('NCHAR','NVARCHAR','CHAR','VARCHAR')
Lowell