Как выполнить поиск и замену части строки во всех столбцах во всех таблицах в базе данных SQL - PullRequest
3 голосов
/ 11 июня 2010

Можно ли искать и заменять все вхождения строки во всех столбцах во всех таблицах базы данных? Я использую Microsoft SQL Server.

Ответы [ 3 ]

4 голосов
/ 11 июня 2010

Не легко, хотя я могу сделать два способа:

  1. Напишите серию хранимых процедур, которые идентифицируют все столбцы varchar и text всех таблиц, и сгенерируйте отдельные операторы обновления для каждого столбца каждой таблицы в форме "UPDATE foo SET BAR = REPLACE (BAR, 'foobar', 'quux «)». Вероятно, это будет связано с большим количеством запросов к системным таблицам, с большим количеством экспериментов - Microsoft не старается изо всех сил документировать это.
  2. Экспортируйте всю базу данных в один текстовый файл, выполните поиск / замену для этого, а затем повторно импортируйте всю базу данных. Учитывая, что вы используете MS SQL Server, на самом деле это более простой подход. Microsoft создала Мастер публикации баз данных Microsoft SQL Server по другим причинам, но он делает прекрасный инструмент для экспорта всех таблиц базы данных SQL Server в виде текстового файла, содержащего чистый SQL DDL и DML. Запустите инструмент, чтобы экспортировать все таблицы для базы данных, отредактируйте полученный файл, как вам нужно, и затем верните файл обратно в sqlcmd, чтобы воссоздать базу данных.

Если бы у меня был выбор, я бы использовал второй метод, если DPW работает с вашей версией SQL Server. В последний раз, когда я использовал этот инструмент, он отвечал моим потребностям (MS SQL Server 2000/2005), но у него были некоторые особенности при работе с ролями базы данных.

2 голосов
/ 03 апреля 2012

В MySQL вы можете сделать это очень легко, например так:

update [table_name] set [field_name] = replace ([field_name], '[string_to_find]', '[string_to_replace]');

Я лично проверил это на рабочем сервере.

Example:
update users set vct_filesneeded = replace(vct_filesneeded,'.avi','.ai');

Ссылка: http://www.mediacollege.com/computer/database/mysql/find-replace.html

1 голос
/ 13 января 2012

Хорошей отправной точкой для написания такого запроса является хранимая процедура «Поиск во всех столбцах всех таблиц в базе данных определенного значения» .Полный код находится по ссылке (не тривиально, но скопируйте / вставьте и используйте его, он просто работает).

Оттуда относительно тривиально изменить код для замены найденных значений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...