Сразу скажу, что пишу на C#, но решил пост сделать в этой теме.
Вообщем при разработке ПО бывают проблемы что кто-то как то меняет хранимку. И вроде бы название совпадает и так на вид похожа, но блин какую то цифру заменили... такие ошибки тяжело искать, занимают массу времени.
Короче решил сделать при старте ПО проверку на целостность БД. Наличие таблиц, полей и индексов не составило проблемы, а вот с хранимками встал в ступор... Как можно узнать их содержимое? Или хотя бы хеш... Чтобы можно было бы их сравнить?
Здравствуйте, SanyaVB, Вы писали:
SVB>Сразу скажу, что пишу на C#, но решил пост сделать в этой теме.
SVB>Вообщем при разработке ПО бывают проблемы что кто-то как то меняет хранимку. И вроде бы название совпадает и так на вид похожа, но блин какую то цифру заменили... такие ошибки тяжело искать, занимают массу времени. SVB>Короче решил сделать при старте ПО проверку на целостность БД. Наличие таблиц, полей и индексов не составило проблемы, а вот с хранимками встал в ступор... Как можно узнать их содержимое? Или хотя бы хеш... Чтобы можно было бы их сравнить?
Тут пишут, что вроде даже текст хранимки можно получить.
Здравствуйте, SanyaVB, Вы писали:
SVB>Сразу скажу, что пишу на C#, но решил пост сделать в этой теме.
SVB>Вообщем при разработке ПО бывают проблемы что кто-то как то меняет хранимку. И вроде бы название совпадает и так на вид похожа, но блин какую то цифру заменили... такие ошибки тяжело искать, занимают массу времени. SVB>Короче решил сделать при старте ПО проверку на целостность БД. Наличие таблиц, полей и индексов не составило проблемы, а вот с хранимками встал в ступор... Как можно узнать их содержимое? Или хотя бы хеш... Чтобы можно было бы их сравнить?
А административным способом не решается?
То есть, обычно (тм) хранимки в базе руками менять строго запрещено.
То есть, для этого обычно есть обновлятор (типа FluentMigrator, EF Migrations, ...),
а все скрипты создания/обновления хранимок (или чего бы то ни было) хранятся в исходниках, которые под сорс-контролем.
И хаос превращается в порядок.
Не совсем понятно, чего ты добьешься таким сравнением.
То есть, если даже поймешь, что структура базы отличается от ожидаемой, что делать-то будешь в этом случае?
Здравствуйте, SanyaVB, Вы писали:
SVB>Сразу скажу, что пишу на C#, но решил пост сделать в этой теме.
SVB>Вообщем при разработке ПО бывают проблемы что кто-то как то меняет хранимку. И вроде бы название совпадает и так на вид похожа, но блин какую то цифру заменили... такие ошибки тяжело искать, занимают массу времени. SVB>Короче решил сделать при старте ПО проверку на целостность БД. Наличие таблиц, полей и индексов не составило проблемы, а вот с хранимками встал в ступор... Как можно узнать их содержимое? Или хотя бы хеш... Чтобы можно было бы их сравнить?
Здравствуйте, SanyaVB, Вы писали:
SVB>Вообщем при разработке ПО бывают проблемы что кто-то как то меняет хранимку. И вроде бы название совпадает и так на вид похожа, но блин какую то цифру заменили... такие ошибки тяжело искать, занимают массу времени. SVB>Короче решил сделать при старте ПО проверку на целостность БД. Наличие таблиц, полей и индексов не составило проблемы, а вот с хранимками встал в ступор...
Даже если вы проверите объекты и при запуске все будет хорошо, никто не гарантирует, что в процессе использования приложения, кто-нибудь не залезет в БД и не выполнит изменения. На мой взгляд, вопрос нужно решать административными мерами – ограничить доступ пользователям к БД. Отрегулировать процесс хранения модели БД, тестирования и выпуска обновлений.
SVB>Как можно узнать их содержимое? Или хотя бы хеш... Чтобы можно было бы их сравнить?
А получить содержимое (текст) ХП можно одним из способов:
select routine_definition from information_schema.routines where routine_type = 'PROCEDURE'
exec sp_helptext 'ХП процедура'
select object_definition(object_id) from sys.procedures
select definition from sys.sql_modules where objectproperty(object_id, 'IsProcedure') = 1
select text from syscomments where objectproperty(id, 'IsProcedure') = 1
Здравствуйте, SanyaVB, Вы писали:
SVB>Сразу скажу, что пишу на C#, но решил пост сделать в этой теме.
SVB>Вообщем при разработке ПО бывают проблемы что кто-то как то меняет хранимку. И вроде бы название совпадает и так на вид похожа, но блин какую то цифру заменили... такие ошибки тяжело искать, занимают массу времени. SVB>Короче решил сделать при старте ПО проверку на целостность БД. Наличие таблиц, полей и индексов не составило проблемы, а вот с хранимками встал в ступор... Как можно узнать их содержимое? Или хотя бы хеш... Чтобы можно было бы их сравнить?
А потом после правки хп вам еще нужно будет в коде прописать измененный хеш хранимки, что только добавит еще одну точку возникновения проблем. Мне кажется, что в вашем случае нужно менять процесс разработки в первую очередь.