На днях при переносе старого веб-сайта на новый фреймворк я обнаружил, что в базе данных у нас есть строковое поле, в котором хранится путь к ресурсам, загруженным на веб-сайт. В нашей новой структуре использовалась хорошо построенная система управления контентом, и это упростило нам хранение только первичного ключа актива, а не всего физического пути к серверу. Хранение физического пути в базах данных никогда не является хорошей практикой. В тот момент, когда вы переходите на новый сервер, все старые пути становятся недействительными. Изменение столбца со строки на GUID в базе данных может повлиять на нашу реляционную структуру, поэтому вместо этого мы просто внесли изменения в код и установили поле в GUID в модели (все благодаря MVC). Поскольку наш код теперь рассматривает столбец как GUID, поэтому всякий раз, когда возвращалось какое-то старое значение (полный путь актива), мы получали ошибку 500. Я искал некоторые решения для написания простого сценария, чтобы просто удалить значения, отличные от GUID, из столбца, и обнаружил, что SQL SERVER не предоставляет нам прямого способа проверки того, что находится в строковом поле. Мне повезло, и я нашел способ. Мы использовали скрипт, который был примерно таким:
SELECT * [table_Name]
WHERE [Guid_String_Field] LIKE REPLACE(‘00000000–0000–0000–0000–000000000000’, ‘0’, ‘[0–9a-fA-F]’)
UPDATE [table_Name]
SET [Field-Name1]=[value]
WHERE [Guid_String_Field] LIKE REPLACE('00000000–0000–0000–0000–000000000000', '0', '[0–9a -fA-F]')
Здесь вы можете видеть, что мы просто делаем число, похожее на Guid, с нулями и заменяем всеми буквенно-цифровыми символами, которые дают действительный Guid, а затем сопоставляются с ним.
Надеюсь, поможет….. :-)