Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Vadim999 Member [скрыт] Откуда: Сообщений: 107 |
Здравствуйте, люди добрые! Помогите чем можете. Сами мы не местные. Вот приходится поддерживать старую БД, полную всяких хранимок и прочих насыщенных SQL кодом штуковин. Копчиком чуял что это обернется болью в заднице, но не знал что на столько. Печаль моя крайне проста и понятна. В наш век, когда космические корабли бороздят просторы большого театра, а языки имеют строгую типизацию или всякие средства статического анализа кода. То SQL валится в множестве случайных мест буквально при каждом изменении. Скажите, милостивые господа, поделитесь мудростью житейской, как вы с окаянным SQL справляетесь. С помощью каких средств и магических тулзов? Приведу некоторые кейсы моего батхерта: 1. Удалил/переименовал колонку в таблице - валятся хранимки где был её select. 2. Удалил/переименовал хранимку - валятся хранимки где её вызывали. 3. Поменял тип - валятся cast и convert. 4. А уж про предотвращение ошибок в динамическом SQL я и не мечтаю. |
7 июл 15, 11:06 [17860942] Ответить | Цитировать Сообщить модератору |
0-0
Guest |
[quot Vadim999]1. Удалил/переименовал колонку в таблице - валятся хранимки где был её select. 2. Удалил/переименовал хранимку - валятся хранимки где её вызывали. [\quot] Выражаясь вашим языком: Откройте для себя чудодейственный View Dependencies |
7 июл 15, 11:09 [17860963] Ответить | Цитировать Сообщить модератору |
Minamoto Member Откуда: Москва Сообщений: 1162 |
Vadim999, вот на эту штуку посмотрите. Не факт, что решит все ваши проблемы, но, может быть, сможет помочь. https://www.sql.ru/forum/1045562/sql-refactor-studio-free-addin-for-ssms-2012-2014 |
7 июл 15, 11:10 [17860974] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
Тестирование
Тестирование
Тестирование
Тестирование Причем все измененяи и тестирование разумеется происходят на тестовом сервере, а не на промышленном |
||||||||
7 июл 15, 11:12 [17860994] Ответить | Цитировать Сообщить модератору |
Minamoto Member Откуда: Москва Сообщений: 1162 |
Хотя, они, конечно, уже выпилили из бесплатной версии основную фишку, и теперь денег за нее хотят... На Хабре недавно один обзор SSDT проскакивал, возможно, имеет смысл его использовать: http://habrahabr.ru/company/infopulse/blog/256653/ |
7 июл 15, 11:19 [17861037] Ответить | Цитировать Сообщить модератору |
Vadim999 Member [скрыт] Откуда: Сообщений: 107 |
Милсдарь, это всё равно что проверенный дедовский метод - поиск строки по всему коду.
Спасибо, КЭП! Честно говоря слабо себе представляю как это делается в БД. Раньше там тестов не было. Придется клонировать БД для теста, из отдельного приложения заполнять фикстурами, гонять тесты, инрегрировать все это в CI. Но естественно такие юнит и интеграционные тесты нужно наращивать постепенно, разбираясь в функционале и приоритетно писать на новый функционал. На это обычно уходят годы, если бестолковые разработчики сами не бросают эту затею. К тому же не у каждого работодателя найдутся ресурсы на +50% времени на написание тестов. Вернувшись на грешную землю - сейчас я никак не могу гарантировать отсутствие ошибок. Но могу лишь искать средства и практики по уменьшению их количества. |
||||
7 июл 15, 11:28 [17861106] Ответить | Цитировать Сообщить модератору |
0-0
Guest |
Проблемы автора решаются банально: 1. Тестирование 2. Проект в Visual Studio, уж ошибки связанные с удалением\переименованием колонок\процедур он отлавливает хорошо. 3. Возможности Managment Studio (View dependencies) 4. Доп. утилиты, например SQL search RedGate и т.п. |
7 июл 15, 11:28 [17861109] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8350 |
Vadim999, в первом приближении достаточно установить любой поисковый плагин для SSMS. Я использую SQL Search - бесплатно и быстро. Тестирование - это когда у Вас написаны тесты для 100+ процедур и функций и Вы понимаете - как и что тестировать :) Идеальный вариант. Еще очень хорошая практика писать представления и функции с привязкой к схеме. |
7 июл 15, 11:29 [17861122] Ответить | Цитировать Сообщить модератору |
Vadim999 Member [скрыт] Откуда: Сообщений: 107 |
Спасибо, посмотрю, но похоже тут нужна Visual Studio. А так хочется разрабатывать на SQL не зависимо от IDE. Хранить исходники в файлах в Git репозитории и редактировать в Vim, а какой-нибудь SqlLinter бы проверял за тобой все ошибки. Ах мечты-мечты :) |
||
7 июл 15, 11:33 [17861159] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
Пожалуйста, наивный, думающий, что существует волшебный код, который разгребет чужой бардак. Импакт анализ нельзя построить на основании кода. Импакт анализ делается на основе актуальных словарей. В которых все сущности зарегистрированы и зарегестрированы их связи друг с другом.
Зато они сразу найдутся при остановке промышленного сервера. Верно ведь ? |
||||
7 июл 15, 11:37 [17861199] Ответить | Цитировать Сообщить модератору |
Minamoto Member Откуда: Москва Сообщений: 1162 |
Vadim999, Ну так вы ж заикнулись про "космические корабли бороздят просторы большого театра, а языки имеют строгую типизацию или всякие средства статического анализа кода". Средства статического анализа практически всегда идут либо приложением к IDE, либо отдельной утилитой. Отдельных утилит для View Dependencies в SQL я не знаю, а приложений к Visual Studio или Management Studio тут несколько привели. |
7 июл 15, 11:39 [17861213] Ответить | Цитировать Сообщить модератору |
StarikNavy Member Откуда: Москва Сообщений: 2395 |
1. "не делайте так" (С) С. Джобс 2. "не делайте так" (С) С. Джобс 3. "не делайте так" (С) С. Джобс если есть старый не описанный хлам, с невозможностью тестовой среды, все изменения - через добавление новых полей и обертки над обертками тем более у SQL есть бонус, что в процедуру можно добавлять новые переменные, и старый ее вызов (со старым набором) не ломается |
||
7 июл 15, 14:47 [17862801] Ответить | Цитировать Сообщить модератору |
eny Member Откуда: москва Сообщений: 292 |
Удалять что-то из работающей и полной всякими данными СУБД - плохая идея, особенно если полностью не разобрался с сущностями этой БД и где какие данные используются. А когда разберешься всякое желание что-либо удалять отпадет само... вопщем за 15 лет работы никогда с такой проблемой не сталкивался в полный рост а динамический SQL - это хак и крайний случай и нужно его всячески избегать |
||
7 июл 15, 15:27 [17863026] Ответить | Цитировать Сообщить модератору |
Mind Member Откуда: Лучший город на Земле Сообщений: 2322 |
Какое воспаленное сознание может решить удалить что-то в базе, в которой нифига не понимаешь? |
||||
7 июл 15, 23:54 [17865204] Ответить | Цитировать Сообщить модератору |
Vadim999 Member [скрыт] Откуда: Сообщений: 107 |
В общем порешили на том, что пока по быстрому могу написать регрессионные тесты на всё что попадется под руку, а для всего нового функционала буду писать интеграционные. Вот еще вопрос в тему. Не хочу открывать новый топик. Есть ли у MS что-то типа SQL в памяти? Потому что на каждый test case очень долго получается по много раз клонировать БД, очищать, заливать фикстуры, гонять тест. Без IO диска всё было бы гораздо быстрее. Сейчас единственная идея тестовую базу размещать на RAM диске. Раньше просто у меня было приложение где вся логика внутри, а БД лишь хранилище с доступом через ORM. Можно было для тестов БД заменить на sqlite в памяти. |
8 июл 15, 08:39 [17865565] Ответить | Цитировать Сообщить модератору |
ЕвгенийВ Member Откуда: Москва Сообщений: 4962 |
Только смелым покоряются моря! Ничего не мешает реализовать функционал который хочет ТС, тем более, что появились языки которые позволят сделать это быстро и качественно и дешево. В конце концов даже та же MSSMS в редакторе подчеркнет красным ошибку при отсутствии например такого столбца в таблице. |
||
8 июл 15, 12:38 [17867050] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104751 |
Сделать копию начальных файлов базы и подключать их каждый нужный раз |
||
8 июл 15, 18:19 [17868949] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |