Queria adicionar minha experiência com a conversão. Eu tinha muitos text
campos no código Linq2SQL antigo. Isso permitiu que as text
colunas presentes nos índices fossem reconstruídas ONLINE .
Primeiro, eu conheço os benefícios há anos, mas sempre presumi que a conversão significaria algumas consultas longas e assustadoras, nas quais o SQL Server teria que reconstruir a tabela e copiar tudo, derrubando meus sites e aumentando a frequência cardíaca.
Eu também estava preocupado que o Linq2SQL pudesse causar erros se estivesse realizando algum tipo de verificação do tipo de coluna.
É um prazer informar que os comandos ALTER retornaram INSTANTANEAMENTE - portanto, eles definitivamente estão apenas alterando os metadados da tabela. Pode haver algum trabalho offline acontecendo para trazer <8000 caracteres de volta à tabela, mas o comando ALTER foi instantâneo.
Executei o seguinte para encontrar todas as colunas que precisam de conversão:
SELECT concat('ALTER TABLE dbo.[', table_name, '] ALTER COLUMN [', column_name, '] VARCHAR(MAX)'), table_name, column_name
FROM information_schema.columns where data_type = 'TEXT' order by table_name, column_name
SELECT concat('ALTER TABLE dbo.[', table_name, '] ALTER COLUMN [', column_name, '] NVARCHAR(MAX)'), table_name, column_name
FROM information_schema.columns where data_type = 'NTEXT' order by table_name, column_name
Isso me deu uma boa lista de consultas, que eu apenas selecionei e copiei para uma nova janela. Como eu disse - executar isso foi instantâneo.
O Linq2SQL é bastante antigo - ele usa um designer para o qual você arrasta tabelas. A situação pode ser mais complexa para o Código EF primeiro, mas ainda não o resolvi.