Start with this monstrosity. It will generate all of the individual ALTER TABLE statements, but you will want to check them thoroughly. You will need to drop/rebuild any indexes that refer to columns with character data. This may include dropping/rebuilding foreign keys as well. Possibly check constraints as well.
select 'alter table [' + object_schema_name(c.object_id) + '].[' + object_name(c.object_id) + '] alter column [' + c.name + '] ' + t.name + '(' + case when c.max_length = -1 then 'max' else convert(varchar(4), c.max_length/scalingfactor.factor) end + ') ' + case when c.is_nullable = 1 then 'NULL' else 'NOT NULL' end + ' collate SQL_Latin1_general_CP1_CI_AS'
from sys.columns c join
sys.types t on c.user_type_id = t.user_type_id join
(values (167, 1), (175, 1), (231, 2), (239, 2)) scalingfactor (user_type_id, factor) on t.user_type_id = scalingfactor.user_type_id
where objectproperty(c.object_id, 'IsSystemTable') = 0