Как мне переименовать многие хранимые процедуры, не ломая вещи? - PullRequest
14 голосов
/ 22 июля 2010

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

Я бы хотел переименовать хранимые процедуры в согласованный формат. Очевидно, что я могу переименовать их из SQL Server Management Studio, но это не будет обновлять вызовы, сделанные в коде сайта (C # / ASP.NET).

Могу ли я что-нибудь сделать, чтобы все вызовы были обновлены до новых имен, кроме поиска каждого старого имени процедуры в коде? Есть ли в Visual Studio возможность рефакторинга таких имен хранимых процедур?

NB. Я не считаю, что мой вопрос является дубликатом этого вопроса , поскольку последний вопрос касается исключительно переименования в базе данных.

Ответы [ 13 ]

0 голосов
/ 23 июля 2010

Я полностью поддерживаю рефакторинг любого кода.

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

Скорее, когда вы определяете небольшие функциональные возможности и понимаете взаимосвязи между процессами, вы можете перефакторировать их на небольшие. Однако в основе этого процесса лежит контроль исходного кода вашей базы данных.
Если вы не управляете изменениями в своей базе данных так же, как обычным кодом, у вас будут серьезные проблемы.

Посмотрите на DBSourceTools. http://dbsourcetools.codeplex.com
Он специально разработан, чтобы помочь разработчикам получить контроль над своими базами данных.

Вам нужен повторяемый метод восстановления базы данных до определенного состояния - перед рефакторингом.
Затем повторно примените измененные изменения контролируемым образом.

Как только вы примете это мышление, эта гигантская и подверженная ошибкам задача станет простой.

0 голосов
/ 22 июля 2010

Меня больше волновало бы игнорирование имен процедур и замена устаревшего DAL на Блок доступа к данным Enterprise Library 5

Средства доступа к базам данных в Enterprise Library 5 DAAB - Database.ExecuteSprocAccessor

Наличие кода, похожего на

 public Contact FetchById(int id)
 {
  return _database.ExecuteSprocAccessor<Contact>
   ("FetchContactById", id).SingleOrDefault();
 }

Будет иметь значение по крайней мере в миллиард раз больше, чем хранение протоколов с непротиворечивыми именами, особенно если текущий код обходит DataTables или DataSets :: shudders::

0 голосов
/ 22 июля 2010

Используйте утилиту наподобие FileSeek для поиска содержимого внутри каждого файла в папке вашего проекта. Не доверяйте поиску в Windows - он медленный и недружественный для пользователя.

Таким образом, если у вас есть хранимая процедура с именем OldSprocOne и вы хотите переименовать ее в SP_NewONe , выполните поиск всех вхождений OldSprocOne , а затем выполните поиск всех вхождений OldSprocOne чтобы узнать, не используется ли это имя где-либо еще и не вызовет ли проблем. Затем переименуйте каждое вхождение в коде.

Это может быть очень много времени и повторяться для больших систем.

...