DECLARE @tableName NVARCHAR(50)= 'tablename'; DECLARE @tmpTable TABLE ( ColumnName NVARCHAR(50) NOT NULL PRIMARY KEY , ColumnMaxLen INT NOT NULL ); INSERT @tmpTable SELECT COLUMN_NAME , 0 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = @tableName; DECLARE @columnName NVARCHAR(50); DECLARE @columnMaxLen INT; DECLARE @sql NVARCHAR(MAX); DECLARE tmpCursor CURSOR FOR SELECT ColumnName FROM @tmpTable FOR READ ONLY; OPEN tmpCursor; FETCH NEXT FROM tmpCursor INTO @columnName; WHILE @@FETCH_STATUS = 0 BEGIN SET @sql = 'SELECT @columnMaxLen=ISNULL(MAX(LEN([' + @columnName + '])), 0) FROM ' + @tableName; -- PRINT @sql; EXEC sp_executesql @sql, N'@columnMaxLen int out', @columnMaxLen OUT; UPDATE @tmpTable SET ColumnMaxLen = @columnMaxLen WHERE ColumnName = @columnName; FETCH NEXT FROM tmpCursor INTO @columnName; END; CLOSE tmpCursor; DEALLOCATE tmpCursor; SELECT * FROM @tmpTable;