Назад | Перейти на главную страницу

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

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

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

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

Да.

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

Возможно нет. Проблема с 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 может быть настроен со связанными серверами, синонимами, представлениями и т. Д. Для запроса ваших существующих объектов.

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

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

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

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

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

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