Len() is the only way I know of to find actual space used in columns.I had this and made a few changes to adapt it to your problem. It's not very elegant but you only need to run it once. Change Pubs to your DB in three places belowUSE pubsCreate Procedure p_CheckSizes (@TableName sysname)ASBEGINSET NOCOUNT ONSET CONCAT_NULL_YIELDS_NULL OFFIF Object_ID('v_CheckSizes') IS Not NullDROP VIEW v_CheckSizesIF Object_ID('tempdb..##exec') IS Not NullDROP TABLE ##execSELECT ID = Identity(int, 1,1), Cmd = Cast ('Create View v_CheckSizes AS ' AS Varchar(255))INTO ##execINSERT ##execSELECT 'Select ''L'' Type, Max(Len(['+COLUMN_NAME+'])) MaxLen, ''['+COLUMN_NAME+']'' ColName FROM ['+TABLE_NAME+'] UNION ALL ' CmdFROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = @TableName AND DATA_TYPE in ( 'varchar', 'nvarchar')INSERT ##execSELECT 'Select ''D'' Type, '+Cast(CHARACTER_MAXIMUM_LENGTH as Varchar)+' MaxLen, ''['+COLUMN_NAME+']'' ColName UNION ALL ' CmdFROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = @TableName AND DATA_TYPE in ( 'varchar', 'nvarchar' )INSERT ##exec (cmd) SELECT 'SELECT ''#'',0, ''#['+@TableName+']#'''If (Select count(1) From ##exec) > 2 BEGIN EXEC master..xp_execresultset N'SELECT ''''+Cmd+'''' FROM ##exec ORDER BY ID ',N'Pubs' DROP TABLE ##exec Select 'Unused Space ['+@TableName+'] ' + D.ColName + ' --> ' + Cast (D.MaxLen - L.MaxLen As Varchar(10)) [Unused Space In Column] FROM v_CheckSizes L, v_CheckSizes D WHERE L.ColName = D.ColName AND D.MaxLen <> L.MaxLen AND D.Type = 'D' AND L.Type = 'L' AND L.ColName <> '#['+@TableName+']#' ORDER BY ( D.MaxLen - L.MaxLen )ENDENDRun:master..xp_execresultset 'SELECT ''exec p_CheckSizes ''''''+TABLE_NAME+'''''''' FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = ''BASE TABLE''',N'Pubs'To generate output similar to:Unused Space [stores] [stor_name] --> 4Unused Space [stores] [city] --> 11Unused Space [stores] [stor_address] --> 21Unused Space [titles] [title] --> 17Unused Space [titles] [notes] --> 21--KenYour Kung-Fu is not strong. -- 'The Core'