Добавить / удалить столбцы таблицы - сопровождение / оптимизация кода

Каков наилучший способ сохранить код большого проекта?

Допустим, у вас есть 1000 хранимых процедур, и вы должны добавить новый столбец в таблицу (или удалить)

Там может быть 1-2 или 30 хранимых процедур, которые могут быть затронуты.

Просто один "поиск" по имени таблицы может быть недостаточно хорошим, скажем, вам нужно знать только те места, где в таблице есть вставка / обновление / удаление.

поиск 'вставки имени таблицы' может быть хорошей идеей, но у вас может быть пробел между этими двумя словами или двумя пробелами, или TAB ... может быть, имя таблицы написано как '[tablename]' То же самое для всех 3 (вставка / обновление / удаление).

Я в основном ищу какие-то "ограниченные зависимости"

Как это обрабатывается наилучшим образом?

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

  2. Рядом с каждой вставкой / обновлением / удалением храните какой-то определенный код в качестве комментария, и таким образом вы сможете искать то, что вам нужно? Пример: 'insert_tablename', 'update_tablename', 'delete_tablename'

  3. у кого есть идея получше?

1 ответ

Решение

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

Например, если вы добавляете новый столбец в таблицу, он должен иметь значение NULL или иметь значение по умолчанию, чтобы операторы INSERT не нуждались в немедленном обновлении для ссылки на него. Хранимые процедуры можно постепенно обновлять, чтобы принять новый параметр для представления этого столбца, и он должен быть обнуляемым / необязательным, чтобы приложения (-и) не должны были сразу знать об этом столбце. И т.п.

Это также требует, чтобы ваши исходные операторы вставки включали явный список столбцов. Если вы просто скажете:

INSERT dbo.table VALUES(@p1, @p2, ...);

Тогда это значительно усложняет совместимость ваших изменений.

Что касается удаления столбца, ну, это немного сложнее. Зависимости не идеальны в SQL Server, но вы должны быть в состоянии найти много информации из этих динамических объектов управления:

Вы также можете найти эти статьи интересными:

Другие вопросы по тегам