Je voulais ajouter mon expérience avec la conversion. J'avais de nombreux text
champs dans l'ancien code Linq2SQL. C'était pour permettre aux text
colonnes présentes dans les index d'être reconstruites EN LIGNE .
D'abord, je connais les avantages depuis des années, mais j'ai toujours supposé que la conversion signifierait de longues requêtes effrayantes où SQL Server devrait reconstruire la table et tout copier, abattre mes sites Web et augmenter mon rythme cardiaque.
Je craignais également que Linq2SQL puisse provoquer des erreurs s'il effectuait une sorte de vérification du type de colonne.
Heureux de signaler cependant que les commandes ALTER sont retournées INSTANTANÉMENT - donc elles ne changent certainement que les métadonnées de la table. Il peut y avoir du travail hors ligne pour ramener <8000 caractères de données dans la table, mais la commande ALTER a été instantanée.
J'ai couru ce qui suit pour trouver toutes les colonnes nécessitant une conversion:
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
Cela m'a donné une belle liste de requêtes, que je viens de sélectionner et de copier dans une nouvelle fenêtre. Comme je l'ai dit, cela a été instantané.
Linq2SQL est assez ancien - il utilise un concepteur sur lequel vous faites glisser des tables. La situation peut être plus complexe pour EF Code d'abord, mais je ne l'ai pas encore abordé.