Определите содержимое varchar в столбцах nvarchar
-
18-09-2019 - |
Вопрос
У меня есть куча столбцов NVARCHAR, которые, как я подозреваю, содержат идеально сохраняемые данные в столбцах VARCHAR.Однако я не могу просто пойти и изменить тип столбцов на VARCHAR и надеяться на лучшее, мне нужно сделать какую-то проверку.
Я хочу выполнить преобразование, потому что данные статичны (они не изменятся в будущем), а столбцы проиндексированы и выиграют от меньшего индекса (varchar) по сравнению с фактическим индексом (nvarchar).
Если я просто скажу
ALTER TABLE TableName ALTER COLUMN columnName VARCHAR(200)
тогда я не получу сообщение об ошибке или предупреждение.Данные в Юникоде будут усечены / потеряны.
Как мне проверить?
Решение
Почему бы не выполнить приведение туда и обратно, чтобы посмотреть, какие данные будут потеряны?
Предполагается, что для начала используется столбец nvarchar(200)
SELECT *
FROM TableName
WHERE columnName <> CAST(CAST(columnName AS varchar(200)) AS nvarchar(200))
Другие советы
Хммм, интересно.
Я не уверен, что вы можете сделать это в самом SQL-запросе.Вы рады сделать это в коде?Если это так, вы можете получить все записи, затем перебрать все символы в строке и проверить.Но, черт возьми, это медленный путь.