#sql-server #sql-server-2016
Вопрос:
Я работаю над базой данных SQL Server 2016, в которой есть таблица с 730 млн строк и которая растет примерно на 3 м в день. Один из столбцов определен как NVARCHAR(MAX)
и содержит XML. Я хотел бы изменить эту колонку VARCHAR(MAX)
.
alter table [tablename] alter column ExtendedMessage Varchar(MAX) NOT NULL
Проблема в том, что мне нужно проверить, будут ли какие-либо данные в этом столбце недействительными для сужающего преобразования из NVARCHAR
в VARCHAR
.
Без простой попытки, есть ли способ проверить, приведет ли какие-либо данные к сбою инструкции?
Платформа: SQL Server 2016 Enterprise.
Комментарии:
1. Узнайте количество
?
символов вnvarchar
и сравните его с количеством?
символов в преобразованномvarchar
значении. Если они отличаются, то это была потеря данных.2. Если это XML, почему бы вам не использовать
xml
тип данных3. Спасибо @Larnu. Я буду экспериментировать с этим. Из-за количества/нагрузки на столе мне придется выполнять проверку траншами. Я попробую что-то вроде «где len(ExtendedMessage) <> len(приведение(ExtendedMessage как varchar(макс))
4. спасибо @Charlieface. В этот столбец входит небольшой процент данных, которые не являются xml, но все еще основаны на тексте. Мне нужно провести некоторые дополнительные исследования по этому типу данных и точной причине наличия в этом столбце не xml, чтобы понять, можем ли мы его использовать
5. Это не сработает, @Matt . Значения
LEN
annvarchar
и avarchar
будут по-прежнему одинаковыми, если заменить символ.N'Cönàn'
и'C?n?n'
имеют одинаковую длину (я не говорю, что символы будут потеряны, просто используя пример)