From my “Spreadsheet sizer” script, this one helped me move sensibly away from pesky varchar(max) columns.
-- ColumnMaxLength.sql DECLARE @TableName VARCHAR(255) = 'customers' --<< input DECLARE @SchemaName VARCHAR(255) = 'dbo' DECLARE @sqlcmd varchar(max) select @sqlcmd = stuff((SELECT ' union all select ' + QUOTENAME(table_schema,'''') + ' [Schema], ' + QUOTENAME(TABLE_NAME,'''') + ' [Table], ' + quotename(column_name,'''') + ' [Column], max(datalength(' + quotename(column_name) + ')) MaxLength from ' + quotename(table_schema) + '.' + quotename(table_name) from information_schema.columns where 1=1 AND table_name = @TableName AND table_schema = @SchemaName order by column_name for xml path(''),type).value('.','varchar(max)'),1,11,'') exec(@sqlcmd)