SELECT s.name as [Schema], v.name as [View], c.name as [Column],
CASE
WHEN t.name IN('varbinary', 'binary', 'char', 'varchar') THEN t.name + CASE WHEN c.max_length = -1 THEN '(MAX)' ELSE '(' + CAST(c.max_length AS VARCHAR) + ')' END
WHEN t.name IN('nchar', 'nvarchar') THEN t.name + CASE WHEN c.max_length = -1 THEN '(MAX)' ELSE '(' + CAST(c.max_length / 2 AS VARCHAR) + ')' END
WHEN t.name IN('decimal', 'numeric') THEN t.name + '(' + CAST(c.PRECISION AS VARCHAR) + ', ' + CAST(c.scale AS VARCHAR) + ')'
ELSE t.name END AS Definition,
CASE WHEN c.is_nullable = 1 THEN 'Y' ELSE '' END IsNullable,
c.column_id as ColumnOrder
FROM sys.views v INNER JOIN sys.schemas s ON v.SCHEMA_ID = s.SCHEMA_ID
INNER JOIN sys.columns c ON c.OBJECT_ID = v.OBJECT_ID
INNER JOIN sys.types t ON t.system_type_id = c.system_type_id
WHERE s.name = 'pub'
ORDER BY s.name, v.name, c.name