Konvertere alle ntext til nvarchar(max)

Noen automatiske oppgraderinger av databaser til SQL Server konverterer MEMO-felter til ntext. Disse feltene medfører feil i eRedaktør, og skal ikke brukes. De er også på vei ut fra SQL Server uansett, så det er flott å bli kvitt dem. Her er en enkel løsning for å konvertere alle disse feltene.

For å se hvilke felter det gjelder:

DECLARE @SQL NVARCHAR(MAX) = '';
SELECT  @SQL = @SQL + 'ALTER TABLE ' + QUOTENAME(OBJECT_SCHEMA_NAME(object_id)) + '.' +
                        QUOTENAME(OBJECT_NAME(object_id)) +
                        ' ALTER COLUMN ' + QUOTENAME(Name) +
                        ' NVARCHAR(MAX) ' +
                       -- CASE WHEN is_nullable = 1 THEN 'NOT' ELSE '' END +
                        ' NULL;' + CHAR(13) + 'GO; '
FROM    sys.columns
WHERE   system_type_id = 99; --NTEXT
Select @SQL

For å faktisk konvertere dem bytter du bare ut siste linjen med denne:

exec SP_EXECUTESQL @SQL;

For at dette skal fungere, må alle feltene være "nullable" eller har en verdi fra før. Det vil dukke opp feilmelding med hvilke felt som må endres for å komme videre.