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