Хотів додати свій досвід перетворення. У мене було багато text
полів стародавнього коду Linq2SQL. Це дозволило переглядати text
стовпці, присутні в індексах, ONLINE .
Спершу я знав про переваги роками, але завжди вважав, що перетворення означатиме страхітливі довгі запити, коли SQL Server повинен був би відновити таблицю і скопіювати все, знизивши мої веб-сайти та підвищивши частоту серця.
Я також був стурбований тим, що Linq2SQL може викликати помилки, якщо він проводить якусь перевірку типу стовпців.
Раді повідомити, що команди ALTER повернулися Мгновно - тому вони, безумовно, лише змінюють метадані таблиці. Може траплятися робота в режимі офлайн, щоб повернути <8000 символьних даних назад до таблиці, але команда ALTER була миттєвою.
Я запустив наступне, щоб знайти всі стовпці, які потребують конверсії:
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
Це дало мені хороший список запитів, які я щойно обрав і скопіював у нове вікно. Як я вже говорив - запустити це було моментально
Linq2SQL досить давній - він використовує конструктор, на який ви перетягуєте таблиці. Ситуація, можливо, спочатку є більш складною для коду EF, але я цього ще не вирішував.