Рефакторинг структуры SQL-сервера

Рефакторинг структуры SQL-сервера

Часто в коде C# я могу изменить имя переменной, и все ссылки на нее также изменятся.

Есть ли похожая функция, которая позволяет мне делать это с объектами на серверах SQL? Некоторые из моих таблиц, столбцов и хранимых процедур нуждаются в переименовании, но, конечно, я хочу, чтобы все это работало.

решение1

В: Существуют ли приложения и функции для этого?

Да.

В: Стоит ли их использовать?

Вероятно, нет. Проблема SQL в том, что чрезвычайно сложно отловить все ссылки на имена объектов.

Одним из примеров является динамический SQL — метод построения строк и последующего выполнения строки в качестве запроса. Моя хранимая процедура может иметь такой код:

DECLARE @StringToExecute
SET @StringToExecute = 'SELECT * FROM dbo.'
SET @StringToExecute = @StringToExecute + 'MyTableName;'
EXEC (@StringToExecute);

Если вы хотите переименовать dbo.MyTableName во что-то другое, вам придется посмотреть на строки внутри хранимых процедур и кода приложения. Это действительно сложно сделать, потому что это также допустимо:

DECLARE @StringToExecute
SET @StringToExecute = 'USE Database1;'
SET @StringToExecute = @StringToExecute = 'SELECT * FROM dbo.'
SET @StringToExecute = @StringToExecute + 'MyTableName;'
EXEC (@StringToExecute);
SET @StringToExecute = 'USE Database2;'
SET @StringToExecute = @StringToExecute = 'SELECT * FROM dbo.'
SET @StringToExecute = @StringToExecute + 'MyTableName;'

Это создает два разных запроса для двух разных MyTableName в двух разных базах данных.

Другой пример — запросы связанных серверов. Любой из ваших других SQL-серверов может быть настроен со связанными серверами, синонимами, представлениями и т. д. для запроса ваших существующих объектов.

Таким образом, изменение имени объекта и рефакторинг таблицы — это то, что вы можете делать только в следующих случаях:

  • Ваше приложение довольно молодое
  • У вас очень жесткий контроль над запросами
  • Вы знаете, откуда поступают запросы

решение2

Если вы говорите о Linq to SQL и изменении определений объектов LINQ в Visual Studio, то типичный способ их обновления — удалить и заново добавить их в конструкторе, а затем найти их ссылки и обновить их на новые имена. Если вы используете DI и что-то вроде шаблона репозитория, это довольно просто, поскольку все ссылки находятся в одной области, а не разбросаны по всему коду.

решение3

Если вы хотите что-то купить, похожеКрасные Воротаесть что-то, что вам нужно.

решение4

Я советую вам попробоватьSQL-завершение Позволяет улучшить читаемость кода, давая осмысленные и понятные имена таблицам, столбцам, временным таблицам и столбцам, представлениям, хранимым процедурам и функциям. SQL Complete автоматически исправит все ссылки на переименованные объекты.

С помощью функции переименования вы также можете изменить имена локальных и SQLCMD переменных за пару секунд. Предварительный просмотр изменений кода в удобном древовидном виде диалогового окна Rename.

Связанный контент