Как разработчик, пишущий в основном на C #, я применил некоторые передовые практики при написании кода на C #. Когда я иногда пишу хранимые процедуры, у меня возникают проблемы с применением этих методов к коду хранимой процедуры.
В нескольких случаях я унаследовал кошмарный код хранимой процедуры, первые три или четыре уровня хранимых процедур, настраивающие некоторые временные таблицы и в основном вызывающие друг друга . Никакой реальной работы, всего несколько строк кода. Затем, наконец, идет вызов «последней» хранимой процедуры, большого монстра из 3000-5000 строк кода SQL. В этом коде обычно много кода, пахнущего дублированием кода, сложными потоками управления (также известными как спагетти) и методом, который выполняет слишком много вещей, расположенных друг за другом, без четкого разделения, где начинается один фрагмент работы и где он заканчивается (даже не комментарий как делитель).
Я также заметил использование закомментированных операторов выбора, которые выбирают из промежуточных временных таблиц. Выборы можно снова включить для целей отладки, но их необходимо удалить перед любым вызывающим кодом, ожидающим определенного порядка возвращаемых наборов результатов.
Очевидно, мои коллеги по команде также разделяют мое отсутствие хороших практик написания SQL.
] Итак ... (и вот настоящий вопрос) ... каковы хорошие практики для написания модульных поддерживаемых хранимых процедур?
Приветствуются как домашние методы, так и ссылки на книги / блоги. Методы, а также инструменты, которые помогают с определенными задачами.
Давайте резюмируем некоторые области, в которых я не нашел хороших практик
В основном я сталкиваюсь с SQL Server как с СУБД, но ответы агностика СУБД указывают на особенности других СУБД: помощь в вышеупомянутых случаях также приветствуется.
Чтобы дать некоторую предысторию: большинство больших хранимых процедур, с которыми я столкнулся, находятся в сценариях отчетов, где в основе лежит просто создание некоторых сводных значений из большой таблицы. Но попутно вам нужно исключить некоторые значения, которые оказались в какой-то таблице исключений, добавить некоторые значения в некоторую еще не заполненную таблицу материалов, сравнить с прошлым годом (вы можете представить себе уродливый код, который обрабатывает отдел смены продуктов между годами?) и т. д.