Проверьте, можно ли преобразовать столбец NVARCHAR в столбец VARCHAR

#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 an nvarchar и a varchar будут по-прежнему одинаковыми, если заменить символ. N'Cönàn' и 'C?n?n' имеют одинаковую длину (я не говорю, что символы будут потеряны, просто используя пример)