Переименовать все таблицы в базе данных - PullRequest
6 голосов
/ 05 января 2010

У меня есть база данных, где все таблицы имеют префикс с набором одинаковых символов. Это было сделано потому, что когда-то они находились в общей базе данных, созданной для домашних животных, с сотнями других таблиц. Приложение и, следовательно, база данных теперь готовы к выходу из этой фазы и готовы к работе самостоятельно. Я хотел бы удалить префикс для каждой из таблиц. Есть ли более простой способ сделать это, чем щелкнуть правой кнопкой мыши и переименовать каждую таблицу в отдельности?

Ответы [ 5 ]

9 голосов
/ 06 января 2010
select 'exec sp_rename @objname=' + name + ', @newname=' + replace(name ,'prefixedchars', '')
from sysObjects
where type = 'U'

Результаты этого будут примерно такими:

exec sp_rename @objname=prefixedcharsTable1, @newname=Table1
exec sp_rename @objname=prefixedcharsTable2, @newname=Table2
exec sp_rename @objname=prefixedcharsTable3, @newname=Table3
etc... for each table in your db

Все, что вам нужно сделать, это скопировать эти операторы в новое окно запроса и запустить.

Предостережения:

  • Вы получите предупреждающее сообщение: Caution: Changing any part of an object name could break scripts and stored procedures.
  • Вам придется переименовывать таблицы в любых хранимых процедурах, функциях, представлениях и триггерах.
4 голосов
/ 05 января 2010

Вы могли бы написать скрипт для просмотра метаинформации и ее изменения, но разве это не разрушит все ваши SP и параметризованные запросы?

2 голосов
/ 05 января 2010

Вы можете сделать что-то вроде сценария для всей базы данных и выполнить замену строки в сценарии, запустить его в новой базе данных и затем импортировать данные. Это, конечно, зависит от того, насколько хорошо вы можете сопоставить строку, подлежащую замене. Возможно, вам придется внести соответствующие изменения в вашем приложении тоже. Вы всегда можете попробовать что-то подобное в тестовой базе данных, чтобы посмотреть, сработает ли это.

Взгляните на это тоже - Массовое переименование таблиц и хранимых процедур

Один метод имеет определенную стоимость, а другой похож на мое предложение.

0 голосов
/ 09 января 2012

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

select name from sys.Tables

скопируйте и вставьте его в emacs (или ваш любимый редактор строк регулярных выражений) и запустите замену регулярных выражений: поиск \(xyz.*\) и замена на SP_RENAME 'xyz\1', '\1'; Это заменяет таблицу xyzFoo на Foo. Вставьте строки обратно в SQL Server и запустите его.

0 голосов
/ 05 января 2010

Сначала напишите хранимую процедуру, которая имеет параметр имени таблицы и использует синтаксический анализ строки и ALTER TABLE для удаления префикса из указанной таблицы.

Затем используйте sp_MSforeachtable для вызова этой процедуры для каждой таблицы.

Ссылка: http://weblogs.sqlteam.com/joew/archive/2007/10/23/60383.aspx

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