I ran this in the Test account and reran the upgrade on the live hardware after changing the recovery model to simple and the speed of the upgrade was phemominal. 20 minutes!
These were the standard columns that I changed manually:
alter table pm_process_assignment
alter column pm_description nvarchar(max) NULL
alter table im_reminder
alter column im_body nvarchar(max) NULL
alter table tps_audit_trail_value
alter column tps_value nvarchar(max) NULL
alter table tps_audit_trail_value
alter column tps_original_value nvarchar(max) NULL
alter table pm_process
alter column usr_processref nvarchar(max) NULL
alter table pm_process
alter column pm_description nvarchar(max) NULL
alter table tps_user_message
alter column tps_application_data nvarchar(max) NULL
alter table tps_user_message
alter column tps_body nvarchar(max) NULL
To get the size of the tables in order i ran this:
WITH table_space_usage ( schema_name, table_name, used, reserved, ind_rows, tbl_rows )
AS (SELECT
s.Name
, o.Name
, p.used_page_count * 8
, p.reserved_page_count * 8
, p.row_count
, case when i.index_id in ( 0, 1 ) then p.row_count else 0 end
FROM sys.dm_db_partition_stats p
INNER JOIN sys.objects as o ON o.object_id = p.object_id
INNER JOIN sys.schemas as s ON s.schema_id = o.schema_id
LEFT OUTER JOIN sys.indexes as i on i.object_id = p.object_id and i.index_id = p.index_id
WHERE o.type_desc = 'USER_TABLE' and o.is_ms_shipped = 0)
SELECT t.schema_name
, t.table_name
, sum(t.used) as used_in_kb
, sum(t.reserved) as reserved_in_kb
,sum(t.tbl_rows) as rows
FROM table_space_usage as t
GROUP BY t.schema_name , t.table_name
ORDER BY used_in_kb desc
to check for the ntext data type on the top 12 largest tables I ran this for each changing the bit in bold for each table name
SELECT
c.name 'Column Name',
t.Name 'Data type',
c.max_length 'Max Length',
c.precision ,
c.scale ,
c.is_nullable,
ISNULL(i.is_primary_key, 0) 'Primary Key'
FROM
sys.columns c
INNER JOIN
sys.types t ON c.system_type_id = t.system_type_id
LEFT OUTER JOIN
sys.index_columns ic ON ic.object_id = c.object_id AND ic.column_id = c.column_id
LEFT OUTER JOIN
sys.indexes i ON ic.object_id = i.object_id AND ic.index_id = i.index_id
WHERE
c.object_id = OBJECT_ID('tps_user_message_recipient_archive') and t.Name ='ntext'
I can't confess to creating these scripts but a little googling works wonders
Thanks for your help. Hope that this helps others