Вопрос

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

Мы находимся в процессе их отладки, чтобы они соответствовали исходному процессу, который был написан на VB6.Причина, по которой они решили переписать их на t-sql, заключается в том, что процесс vb занимает дни, а этот новый процесс - часы.

Все это прекрасно, но как я могу сделать эти теперь уже массивные куски кода t-sql (1,5 тыс. + строк) даже удаленно читаемыми / поддерживаемыми?

Любой опыт, позволяющий использовать t-sql без сильной головной боли, очень приветствуется.

Это было полезно?

Решение

Сначала создайте каталог, полный sql-файлов, и сохраняйте их там.Добавьте этот набор файлов .sql в систему контроля версий.SVN работает хорошо.У вас есть инструмент, который загружает их в вашу базу данных, перезаписывая все существующие.

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

Теперь вы можете сколько угодно реорганизовывать свои процедуры, а затем запускать тесты, чтобы подтвердить правильность функционирования.

Другие советы

Что касается форматирования / настройки SQL, я добился успеха с http://www.sqlinform.com/ - вы можете опробовать бесплатную онлайн-версию, а также настольную версию.

SQLinForm - это автоматический форматировщик кода SQL для всех основных баз данных (ORACLE, SQL Server, DB2 / UDB, Sybase, Informix, PostgreSQL, MySQL и т.д.) С множеством опций форматирования.

Определенно начните с переформатирования кода, особенно отступов.

Затем модулируйте SQL.Разделите фрагменты на более мелкие процедуры и функции с описательными именами в их собственных автономных файлах.Я нахожу, что это само по себе очень хорошо помогает улучшить мое понимание больших файлов SQL.

ApexSQLScript - отличный инструмент для создания сценариев для всей базы данных - затем вы можете проверить это в системе управления версиями и управлять изменениями.

Я также обнаружил, что документирование sprocs последовательно позволяет вам извлекать информацию о них, используя данные об исходном коде в sys.sql_modules - вы можете использовать теги или что-то еще, чтобы помочь документировать подсистемы.

Кроме того, используйте схемы (или даже несколько баз данных) - это действительно поможет разделить вашу базу данных на логические единицы и указать на архитектурные проблемы.

Что касается большого кода, то недавно я обнаружил, что функция CTE SQL2005 очень полезна для управления кодом с большим количеством вложенных запросов (даже не рекурсивных).Вместо управления кучей вложенностей и отступов, CTE могут быть объявлены и созданы, а затем использованы в заключительном операторе.Это также помогает при рефакторинге, поскольку кажется намного проще удалять избыточные вложенные запросы и столбцы.

Хранимые процедуры и UDF-файлы жизненно важны для управления большой базой кода и устранения темных углов.Я не нашел представления ужасно полезными, потому что они не поддаются параметризации (UDFS можно использовать в этих случаях, если результирующие наборы невелики).

Постарайтесь максимально модулировать SQL и создайте набор тестов, которые позволят вам поддерживать, рефакторинговать и добавлять функции, когда это необходимо.Однажды я имел удовольствие унаследовать Сохраненный процесс, который насчитывал 5000 строк, и мне до сих пор снятся кошмары по этому поводу.Как только проект был завершен, я распечатал сохраненную процедуру, чтобы посмеяться, разрушая X-деревья в процессе.Во время одной из еженедельных стендап-сессий нашей компании я разложил его из конца в конец, и он растянулся по всей длине здания.Я привел это в качестве примера того, как не нужно писать и поддерживать хранимые процедуры.

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

Это определенно не бесплатно, но для обеспечения единообразного форматирования вашего T-SQL программное обеспечение Redgate Запрос SQL это очень удобно.Пока синтаксис вашей процедуры правильный, пара нажатий клавиш (Ctrl + K, Y) мгновенно переформатирует все это.Эти параметры дают вам большой контроль над тем, как форматируется ваш SQL.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top