Как вы поддерживаете большие процедуры T-SQL - PullRequest
2 голосов
/ 17 сентября 2008

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

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

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

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

Ответы [ 7 ]

4 голосов
/ 17 сентября 2008

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

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

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

2 голосов
/ 19 сентября 2008

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

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

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

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

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

2 голосов
/ 17 сентября 2008

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

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

2 голосов
/ 17 сентября 2008

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

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

1 голос
/ 17 сентября 2008

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

0 голосов
/ 19 сентября 2008

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

0 голосов
/ 17 сентября 2008

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

...