You can check this MSDN blog:
declare @table_name varchar(200) set @table_name = 'Branch' declare @max_length_default int, @column varchar(50), @max_length int, @max_length_string varchar(10) create table #temp_table (column_name varchar(50), max_length int, max_length_default int) declare @column_id int, @max_column_id int select @column_id = min(b.column_id), @max_column_id = max(b.column_id) from sys.tables a, sys.columns b where a.[name] = @table_name and a.object_id = b.object_id --and b.system_type_id in ( 231, 167 ) -- select @column_id, @max_column_id declare @command varchar(2000) while(@column_id <= @max_column_id) begin set @column = null select @column = b.name, @max_length_default = b.max_length from sys.tables a, sys.columns b where a.[name] = @table_name and a.object_id = b.object_id --and b.system_type_id in ( 231, 167 ) and b.column_id = @column_id --select @column, @max_length_default if( @column is not null ) begin set @command = 'insert into #temp_table(column_name, max_length, max_length_default) select ''' + @column + ''', max(len(cast([' + @column + ']as varchar(8000)))),' + cast(@max_length_default as varchar(5)) + ' from ' + @table_name + ' where [' + @column + '] is not null' --select @command exec(@command) end set @column_id = @column_id + 1 end select * from #temp_table drop table #temp_table