Great job!
One more fix:
SELECT REPLACE(REPLACE(sch.name + '_' + t.name, '[', '_'), ']', '_') AS [tname] ,
' update statistics ' + QUOTENAME(sch.name) + '.' + QUOTENAME(t.name) [comando]
FROM sys.tables t
INNER JOIN sys.schemas sch ON sch.schema_id = t.schema_id
LEFT JOIN sys.stats s ON t.object_id = s.object_id
JOIN ( SELECT object_id ,
SUM(rows) rows
FROM sys.partitions
GROUP BY object_id
HAVING SUM(rows) > 0
) pa ON t.object_id = pa.object_id
WHERE ( STATS_DATE(t.object_id, stats_id) IS NULL
OR DATEDIFF(DAY, STATS_DATE(t.object_id, stats_id), GETDATE()) >= 3
)
GROUP BY sch.name ,
t.name
ORDER BY 1