powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / По поводу "А как же тогда" собственно по теме
40 сообщений из 40, показаны все 2 страниц
По поводу "А как же тогда" собственно по теме
    #32009302
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Оригинальная ветка скатилась на обсуждение особенностей PowerDesigner, а собственно нормальных ответов раз-два и все, и не удалось услышать окончательного мнения вопрошателя, помогло ли это все ему.

Собственно, соглашаясь с ответом Genady, хочу тут ответить, раз там закрыли:
N_Michael, Вы же сами говорили, что хотя БД и одинаковой структуры, но все же по сути разные и должны быть отдельно, даже привели пример переноса на другой носитель и т.д. и т.п.
Тогда посудите сами: если продолжать, то базу конкретной фирмы можно перенести вообще на другой компутер. И что, Вы будете тягать за собой везде еще одну БД с процедурами, функциями и т.п. Т.е. Вы сами создаете сейчас себе проблему как по отслеживанию положения БД, так и ,все же учитывая по Вашим словам возможные разные требования к отчетам и др., отслеживание соответствия процедур для всех БД одновременно. А если Вам придется какую-то процудуру ихменить только для одной фирмы, что Вы будете делать, проверять в теле процы, кто ее вызвал, и в зависимости от этого исполнять соответствующий код. Изменять то имя процы нельзя - иначе нужно менять ее имя на клиенте.

Я вообще не понимаю, какая сложность (или и в правду лишний раз по клаве постучать в лом) копировать изменяемые процедуры (естественно общие) из одной БД во все остальные.
А не в лом городить городушки и потом при значительном изменении требований одной из фирм, накладывающихся на общие процедуры, рвать на себе волосы и думать: "а как теперь это все разгрести".
Не нужно придумывать лишних проблем, в MS SQL их и так хватит.

Может ответил, а? :О
...
Рейтинг: 0 / 0
По поводу "А как же тогда" собственно по теме
    #32009305
N_Michael
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2Tygra:
>Оригинальная ветка скатилась на обсуждение особенностей PowerDesigner, а собственно нормальных ответов раз-два и все, >и не удалось услышать окончательного мнения вопрошателя, помогло ли это все ему.

К сожаоению не очень помогло, было высказано несколько хороших идей, которые были взяты на заметку, но относительно этой проблемы пока ОПТИМАЛЬНОГО решения не предложили, да и это понятно, задачка так сходу не решается, здесь треба хорошо подумать и прикинуть что к чему, а у всех свои проблемы, да еще и лето .... (да чего душой кривить, я сам такой)

>Собственно, соглашаясь с ответом Genady, хочу тут ответить, раз там закрыли:
>N_Michael, Вы же сами говорили, что хотя БД и одинаковой структуры, но все же по сути разные и должны быть отдельно, >даже привели пример переноса на другой носитель и т.д. и т.п.

Меня опять неправильно поняли, я говорил не о переносе на другой носитель, а о том, что данные могут быть ПРИНЕСЕНЫ из другого места (удаленная точка) в базу одной из фирм...но при этом ПОЛНАЯ БД ФИРМЫ ВСЕГДА НАХОДИТСЯ НА ОДНОМ И ТОМ ЖЕ МЕСТЕ (СЕРВЕРЕ).

>Тогда посудите сами: если продолжать, то базу конкретной фирмы можно перенести вообще на другой компутер. И что, Вы >будете тягать за собой везде еще одну БД с процедурами, функциями и т.п. Т.е. Вы сами создаете сейчас себе проблему >как по отслеживанию положения БД, так и ,все же учитывая по Вашим словам возможные разные требования к отчетам и др.,
>отслеживание соответствия процедур для всех БД одновременно. А если Вам придется какую-то процудуру ихменить только >для одной фирмы, что Вы будете делать, проверять в теле процы, кто ее вызвал, и в зависимости от этого исполнять >соответствующий код. Изменять то имя процы нельзя - иначе нужно менять ее имя на клиенте.
>Я вообще не понимаю, какая сложность (или и в правду лишний раз по клаве постучать в лом) копировать изменяемые >процедуры (естественно общие) из одной БД во все остальные.
>А не в лом городить городушки и потом при значительном изменении требований одной из фирм, накладывающихся на общие >процедуры, рвать на себе волосы и думать: "а как теперь это все разгрести".
>Не нужно придумывать лишних проблем, в MS SQL их и так хватит.

Я с Вами вполне соглаен, но я не понимаю почему так всен настаивают на использовании такого метода, ведь по условиям моей задачи почти все отчеты идентичны (будем считать 95%), это явно не правильно пихать одинаковые процедура по базам и потом их менять, а сособенно процедуры которые "чуть-чуть" различаются так как велика вероятность ошибки при изменении этой процедуры в 4 БД ... а цена ошибки очень велика

Это одно из решений, но оно не ОПТИМАЛЬНОЕ по моему мнению, может кто изменит его ?

P.S. Может кому-то покажется что я сам себе создаю проблемы, но для меня это действительно принципиальный вопрос, который мне необходимо решить НАИЛУЧШИМ/ОПТИМАЛЬНЫМ образом ....

С уважением, Михаил.
...
Рейтинг: 0 / 0
По поводу "А как же тогда" собственно по теме
    #32009308
cube
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пришел в голову такой вариант:
1. Создается, как предлагалось выше, база с процедурами.
2. В этой же базе создается таблица с объектами типа "action", содержащая поля:
а) имя экшна
б) имя сп
в) имя базы(фирмы)
3. В этой же бд есть SP типа sp_GetSPName @ActionName

Скорее всего тут масса несовершенств, но это принцип, стратегия.
...
Рейтинг: 0 / 0
По поводу "А как же тогда" собственно по теме
    #32009311
cube
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ошибся:

sp_GetSPName @ActionName, @FirmName
...
Рейтинг: 0 / 0
По поводу "А как же тогда" собственно по теме
    #32009312
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все равно получается два варианта:
1) Хранить все в каждой базе
2) Хранить процы в отдельной базе и параметром передавать имя БД, а там исполнять EXEC('бла-бла-...')

Как ни сделай, все к этому сводится. Только 1 вариант проще (копирование не проблема), а второй замороченней.

То cube >3. В этой же бд есть SP типа sp_GetSPName @ActionName
А чего она выдает то.
...
Рейтинг: 0 / 0
По поводу "А как же тогда" собственно по теме
    #32009313
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То cube >sp_GetSPName @ActionName, @FirmName
Типа она выдает имя процедуры для конкретной базы, но у нас по условию процедура одна и та же для всех
...
Рейтинг: 0 / 0
По поводу "А как же тогда" собственно по теме
    #32009314
cube
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1. Каждая база "знает", как получить имя СП для конкретного действия: SP_GetSPName.
2. Если какая-нить СП - одна для всех - она будет в поле экшн для всех бд. Если для какой-то конкретной бд нужно вызывать другую СП - имя этой другой будет в поле СП_Нэйм для этого экшна и этой базы.
3. Анализ таблицы с экшнами позволяет контролировать, какие СП юзаются какими фирмами (это я к тому, что бардака не будет).
4. +: если для какой-то фирмы измиенится правило выполнения экшна, то пишем новую СП и соответствующим образом изменяем таблицу.


>но у нас по условию процедура одна и та же для всех
У нас по условию "избегание дублирования СП везде где это возможно и контроль системы (структуры) хранимых процедур (в смысле, чтобы всегда можно было узнать: кто, что и для чего вызывает).
...
Рейтинг: 0 / 0
По поводу "А как же тогда" собственно по теме
    #32009315
cube
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да что такое...

2. Если какая-нить СП - одна для всех - она будет в поле SP_Name для всех бд и данного екшна. Если для какой-то конкретной бд нужно вызывать другую СП - имя этой другой будет в поле СП_Нэйм для этого экшна и этой базы.
...
Рейтинг: 0 / 0
По поводу "А как же тогда" собственно по теме
    #32009319
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так вопрос в том, как теперь из процы узнать, какая база ее вызвала, и обратиться к данным именно этой БД.
...
Рейтинг: 0 / 0
По поводу "А как же тогда" собственно по теме
    #32009320
cube
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Каждая база для выполнения какого-то действия вызывает:
exec sp_GetSPName 'CoolAction', 'db_Firm1'
а потом вызывает полученную сп со своими параметрами. А "проца" SP_GetSPName просто находит в таблице Экшнс строку, соотв. db_Firm1 и CoolAction
...
Рейтинг: 0 / 0
По поводу "А как же тогда" собственно по теме
    #32009321
cube
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ага.. дошло...


Щаз подумаю...
...
Рейтинг: 0 / 0
По поводу "А как же тогда" собственно по теме
    #32009330
cube
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подумал.

1. Вернемся к задаче: нужно избежать дублирования СП, в то-же время иметь возможность удовлетворить индивидуальные потребности отдельной базы.
2. Как это реализовать?
3. На самом высоком уровне абстракции примерно так: вся работа возлагается на некую "оперционную" сущность (в нашем случае базу), которая, получая команду и имя "заказчика", знает как ее выполнить и куда записать результат.
4. Для этого каждый заказчик должен обладать одинаковым интерфейсом с операционной сущностью (таблицы параметров и т.д.).
5. Имя бд определяется по имени "заказчика"
6. "Внутри" операционной сущности имя бд в СП передается как параметр. Но это уже "тактика".

Плюсы:
1. Каждая из баз "не задумывается" о том, является данныое действие для нее уникальным, поэтому простое перенесение процедур в отдельную базу и вызов их с параметром бд_нейм ведет к постепенной утрате контроля и постоянному "вспоминанию", как правильно вызвать сп.
2. Вся "кухня" инкапсулирована в одной сущности, а не распределена (и тем более не продублирована) в разных.
3. Всевозможные следствия из 1 и 2.

Есть ессно и минусы. Что перевесит - это личное дело вкуса и "видения" каждого конкретного программера.
...
Рейтинг: 0 / 0
По поводу "А как же тогда" собственно по теме
    #32009337
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>6. "Внутри" операционной сущности имя бд в СП передается как параметр. Но это уже "тактика".
Нет, это как раз не тактика, а собственно вопрос. Как вызывать внутри такой процедуры запросы к разным БД.
Тогда как надстройку над вызовом процедур сделать очень просто в общем то.Но все сводится все-равно к вышесказанному: вызов одной и той же проги для разных БД
...
Рейтинг: 0 / 0
По поводу "А как же тогда" собственно по теме
    #32009339
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>вызов одной и той же проги для разных БД
Вот вот, а если еще возникнут различия в том что эта прога должна делать в зависимости от того какая БД.....
Вот и возникает вопрос - где тогда бардака будет больше?
...
Рейтинг: 0 / 0
По поводу "А как же тогда" собственно по теме
    #32009341
cube
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>Нет, это как раз не тактика, а собственно вопрос. Как вызывать внутри такой процедуры запросы к разным БД.
Внутри такой процедуры нужно вызывать запросы к ОДНОЙ бд (заранее неизветсно к какой). В этом случае передаем как параметр имя бд. В тех редких случаях, когда это не так, пишем СП, в которой либо явно задаются имена, либо еще как-то передаются (все зависит от ситуации). Но это никак не влияет на структуру отдельно взятой БД фирмы. Поэтому можем наращивать кол-во фирм, изменять логику и т.д., не напрягаясь по поводу того, все ли сп разбросаны по нужным БД и прочей суеты.
...
Рейтинг: 0 / 0
По поводу "А как же тогда" собственно по теме
    #32009342
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To Genady >>вызов одной и той же проги для разных БД
>Вот вот, а если еще возникнут различия в том что эта прога должна делать в зависимости от того какая БД.....
>Вот и возникает вопрос - где тогда бардака будет больше?
Так я о том же и говорил в первом сообщении. Но N_Michael сказал, что все одинаковое....
А тогда мне интересно, в принципе, как еще можно.

To cube>В этом случае передаем как параметр имя бд.
Тогда это нужно обрабатывать через EXECUTE
А N_Michael сказал, что это не подходит, слишком грязно
...
Рейтинг: 0 / 0
По поводу "А как же тогда" собственно по теме
    #32009343
cube
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Genady

>Вот вот, а если еще возникнут различия в том что эта прога должна делать в зависимости от того какая БД.....
>Вот и возникает вопрос - где тогда бардака будет больше?

Различия отразятся в таблице с Экшнами. И все. "На фирме" ничего не изменилось. Дописали еще одну СП, "прописали ее в таблице". Где бардак?

А теперь предствьте: у вас 6 фирм, есть sp_DoSmth, которая одниковая в 1-й и 3-й и 4-й фирме, а в остальных разная. И таких процедур "много". Хотя это "много" составляет 5%-10% от кол-ва сп, которые во всех фирмах идентичны. Добавляется фирма №7. Что будем делать?
...
Рейтинг: 0 / 0
По поводу "А как же тогда" собственно по теме
    #32009345
cube
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>Тогда это нужно обрабатывать через EXECUTE
>А N_Michael сказал, что это не подходит, слишком грязно

Грязно, если делать "в лоб". Если вся система имеет четкую иерархическую организацию, тогда даже самые грязные методы перестают таковыми быть, так как заранее известно, откуда ждать подвоха, эта грязь локализовано в одном месте и имеется ряд "чистых" объектов, полностью контролирующих работу грязных.
...
Рейтинг: 0 / 0
По поводу "А как же тогда" собственно по теме
    #32009346
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>А теперь предствьте: у вас 6 фирм, есть sp_DoSmth, которая одниковая в 1-й и 3-й и 4-й фирме, а в остальных разная. И >таких процедур "много". Хотя это "много" составляет 5%-10% от кол-ва сп, которые во всех фирмах идентичны. >Добавляется фирма №7. Что будем делать?

Заводим под фирму новую базу, переливаем в нее все проги, какие в нее идут, какие нужны только конкретно для этой фирмы - меняем и тоже заливаем. Все, больше ничего не надо делать.
БД то все равно создавать.

А в Вашем варианте мы еще должны добавить кучу записей в таблицу, которая выдает название процедуры для этой фирмы.

А когда у нас будет 10 фирм и 200 процедур будут делать одно и то же но с некоторыми различиями для каждой фирмы, то Вам нужно еще следить, а где какая процедура лежит, как называется и к кому относится - я это про разработку, а не про работу программы. Т.е. еще нужно написать дополнительный интерфейс, который не даст запутаться самому разработчику.

В нашем же случае я всегда знаю, что отчет "Количества хрена на душу населения" исполняется процедурой GetHrenCountForPeople() которая так (одинаково) называется хоть для первой, хоть для 28-ой фирмы. И если чего надо изменить, то я там и изменю. Если этой прогой пользуются еще 10 фирм, то я туда перекопирую и все.
...
Рейтинг: 0 / 0
По поводу "А как же тогда" собственно по теме
    #32009347
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господин N_Michael, отзовитесь. Подходит Вам все-таки передача имени БД параметром и EXECUTE() или нет.
...
Рейтинг: 0 / 0
По поводу "А как же тогда" собственно по теме
    #32009349
cube
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 tygra:

1. Все проги лежат в опреционной базе. Так что вопрос "откуда" - не стоит.
2. Если возникнет необходимоть - напишем и интерфейс. Why not? (Не думаю, что он будет сложным)
3. При появлении новой фирмы мы одним махом выбираем записи из таблицы tblActions с флагом "common" (типа одна для всех) и инсертим их с именем новой фирмы (или вообще в этих записях имя бд = NULL). Для остальных мы либо таким же образом поступаем с записями "отличающихся" фирм, удовлетворяющим потребностям новой фирмы, либо дописываем то, что нужно. Вот и все.
...
Рейтинг: 0 / 0
По поводу "А как же тогда" собственно по теме
    #32009350
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На самом деле мы сейчас уже между собой разговариваем о том, кому и как удобнее работать с вызовом процедур.
Но это уж как кому нравится.

А вот г-н Вопрошатель спрашивал, как же внутри-то процедуры производить операции над разными БД. Все, что ему уже сказали, то ли не подходит, то ли чего еще. Наверное ночь у него уже, спит Потому как нет реакции.
Полемика то разгорелась из-за того, что все держать для каждой БД - не подходит, вызывать одну процедуру с параметром имени БД и дальше EXEC(@DBName+'.......') - то же не подходит, ну не оптимально ему это все.
Я даже и не знаю, а как еще
...
Рейтинг: 0 / 0
По поводу "А как же тогда" собственно по теме
    #32009352
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Различия отразятся в таблице с Экшнами. И все. "На фирме" ничего не изменилось. Дописали еще одну СП, "прописали ее в таблице". Где бардак?
А вот тут не понял, если экшн для разных баз почти одинаковый, то пишем процедуру для каждой базы? А в чем тогда смысл такого подхода?
Далее, автор вопроса, если я правильно помню, говорил, что одинаковые/почти одинаковые только процедуры по отчетам, как тогда быть с остальным, неодинаковыми процедурами? Хранить локально или или тоже в общей базе?
А как быть с процедурами, которые почти одинаковые? Обходить это "почти" Ifами и Caseами?
А если степень "почти" начнет уменьшаться, разве не получаем бардак в коде?
...
Рейтинг: 0 / 0
По поводу "А как же тогда" собственно по теме
    #32009355
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Конечно бардак увеличится.

Тот же пример: я знаю, что одно и то же действие у меня делает одна и таже процедура в каждой БД.
Если держать все вместе, да еще как предлагает cube, то без написания специального интерфейса, я ничерта не пойму просто зайдя в БД через скажем QA. Т.е. действие "ИИИИ" у меня там делают проги "амвап", "енкеут" и еще как то.

Но если не лень создавать специальный интерфейс доступа к процам и из клиентской программы, и себя лично вместо того, чтобы пару раз перекопировать процедуру в другое место !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Это извращение, извините. А в прогах - бардак.
...
Рейтинг: 0 / 0
По поводу "А как же тогда" собственно по теме
    #32009356
cube
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не знаю, tygra... Мы, наверно, по разному поняли вопрос... Но это не важно. Товарищ сам разберется.

зы: ...когда проснется
...
Рейтинг: 0 / 0
По поводу "А как же тогда" собственно по теме
    #32009357
cube
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Предыдущий месаг - на "На самом деле мы сейчас уже между собой разговариваем..."
...
Рейтинг: 0 / 0
По поводу "А как же тогда" собственно по теме
    #32009359
cube
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
>Т.е. действие "ИИИИ" у меня там делают проги "амвап", "енкеут" и еще как то.

Действие ИИИ выполняется ВСЕМИ ОДИНАКОВО: exec db_oper..sp_DoAction 'ИИИ', 'db_Takaya_to'

DoAction может работать по разному: либо "клеить" имя нужной СП из кусков, либо обращаться в соотв. таблицу. И никаких ифов и кейсов.

И вообще, ребята, почитайте нормальную книжку по ООП. Я к сожаелнию не помню сейчас названия и автора, но есть такой буук, в котором ни слова о языках, процедурах, и других подробностях. Там одни принципы. Их стоит соблюдать. Даже если придется еще дописать пару строчек кода. В итоге - дешевле обойдется. Мне кажется мы общаемся на "разных уровнях абстракции"
...
Рейтинг: 0 / 0
По поводу "А как же тогда" собственно по теме
    #32009364
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Мне кажется мы общаемся на "разных уровнях абстракции"

Ааа вон Вы о чем
Ну тогда автора вопроса нужно отсылать к Garya, он большой спец по надстройкам по типу ООП.
...
Рейтинг: 0 / 0
По поводу "А как же тогда" собственно по теме
    #32009365
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А причем тут ООП. Там классы, а тут я от процедур не наследуюсь. Мало того, даже по этому меиоду, получается, что вместо того, чтобы просто вызвать процедуру и сказать, я база такая-то (exec sp_DoReport @DBName = 'Baza1',....), я должен кудато сначала обратиться, сказать, я база такая, а потом уже тот кто-то обратится к процедуре и ! все равно скажет я база такая. Спрашивается, зачем лишняя прокладка. Т.е. вместо того, чтобы 95% процедур вызывать обычно, а 5% "как-то по-другому", я буду вызывать все процедуры "как-то по-другому"?
Или только для 5% делать специальную надстройку?

>Действие ИИИ выполняется ВСЕМИ ОДИНАКОВО: exec db_oper..sp_DoAction 'ИИИ', 'db_Takaya_to'
А почему просто не вызвать: exec sp_ИИИ "db_Takaya_to"
>DoAction может работать по разному: либо "клеить" имя нужной СП из кусков, либо обращаться в соотв. таблицу. И >никаких ифов и кейсов.

1) А это как из кусков.
2) А писать эти процедуры будет не "DoAction", а Programmer, кторому без "линка очень тяжело джоиниться глазами к базе", чтобы отыскать нужную процедуру для действия14 базы 3. Потому как имя неизвестно.

Хотя возможно что такой подход и пошел бы, но не в данном случае, и если бы у нас нестандартно обрабатывалось 90% процедур.


А вообще, пора дожидаться спящего )
...
Рейтинг: 0 / 0
По поводу "А как же тогда" собственно по теме
    #32009367
Фотография Garya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Garya Привилегированный пользователь
Участник
Вот чего я не понял, так почему все крутится только вокруг хранимых процедур? Мы уже выяснили, что на разных фирмах нечто может изменяться (условия хозяйствования), что может привести к изменениюю логики работы. А только ли логики, неужто со структурой данных ничего не происходит? Вот все фирмы печатали в счетах-фактурах страна происхождения "Россия" и номер ГТД - прочерк, поскольку они работают с российским товаром. Эта информация просто вшита в шаблон отчета, и ни в каких таблицах не хранится. А потом вдруг поднадобилось работать с импортным товаром. Дык ведь в таблицы нужно колонки добавить, иже с ними новые таблицы - справочник стран и ГТД! Отредактировать триггеры, хранимые процедуры, VIEW, Foregn keys и т.д. и т.п... Что-то я не понял, что это за однобокая модернизация только на хранимых процедурах.
И еще вот что я не понял. Есть две схемы работы - одна централизованная, вторая децентрализованная. IMHO автор вопроса все свалил в одну кучу. Либо в структуру данных и логику работы вносятся изменения централизованно, причем одинаковые для всех участников процесса. Либо каждый участник процесса живет сам по себе, сам вносит изменения какие захочет. А когда децентрализованно создаются новые версии хранимых процедур, но централизованно производится их запуск - это вообще на анекдот похоже.
...
Рейтинг: 0 / 0
По поводу "А как же тогда" собственно по теме
    #32009376
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так я уже и говорю, что мы про разное говорим.

И, собственно, ждем ответа на это все автора вопроса, чего же ему нужно.
...
Рейтинг: 0 / 0
По поводу "А как же тогда" собственно по теме
    #32009398
cube
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
По поводу "А как же тогда" собственно по теме
    #32009453
N_Michael
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну вот я и проснулся


Всем ответившим большое спасибо, я и не ожидал за столь короткий промежутко времени столько конструктивных предложений, сколько небыло за последние недели


Несколько уточнений сразу, чтоб по этсй ветки не велось обсуждение (пока):

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

По поводу написание "универсального запускальщика процедур" идея очень хороша, нужно только примерить к моей задаче и унифицировать интерфейс вызова, может что и получиться.

Но все же от оригинального вопроса после уточнения всех тонкостей мы немного отошли (может потому, что очень простой вопрос на первый взгляд?).
Изменяю условие задачи:
- если N БД для которых надо написать M ОДИНАКОВЫХ ОТЧЕТОВ (забудем о различных отчетах, различия сейчас не принципиальны).
- пишут несколько программистов.

Мною предлогалось создать дополнительную БД с набором ХП которым передается имя БД для которой эта процедура выполняется.
Можно это сделать следующими методами:

1. Использовать SP_ExecuteSQL или Execute.
2. Использовать локальные курсоры (в начале каждой процедуры, анализируем какая БД создаем локальный курсор и дальше его юзаем)
3. Использовать View'ы.

4. Используем USE <БД> (по моему идеальное решение моей задачи, но USE к сожалению в SP использовать низя-я-я-я
).

ЗАДАЧИ:

1. Какие еще есть способы решения данной проблемы ?
2. Какой решение ОПТИМАЛЬНОЕ и почему ?

С уважением, Михаил.
...
Рейтинг: 0 / 0
По поводу "А как же тогда" собственно по теме
    #32009458
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть ненормальная мысль: скрестить метод, предлагаемый мной и Garya с методом cube и получить вот что и почему:
хранимые процедуры лежат в каждой БД
написать интерфейс, который будет информировать лично программера о том, какие процедуры где лежат и чем отличаются или не отличаются, типа:
процедура sp_Report1 БД 1,2,3.. - значит для всех одинаковая
процедура sp_Report2 БД 1,2
процедура sp_Report2 БД 3 - сие значит, что процедура для БД 1,2 одинаковая, для БД 3 немного другая (но делает эта процедура во всех БД одно и то же по сути действие)
и т.д.
Когда процедуру изменяем, знаем, куда ее надо скомпилять или переписать или еще как - во все БД, или только в какие-то.

Почему все же я придерживаюсь мнения, что процедуры нужно держать для каждой БД отдельно:
1. простота использования самого вызова процедуры - из какой БД не вызови, знаешь, ЧТО вызывается. Не нужно писать ни каких дополнительных вызовов чего-то еще
2. простота работы внутри процедуры (самое главное) - и так отчет не просто делать, а если к этому еще прилепить вызов всего через EXEC или вытягивать курсоры а потом с ними работать - это дополнительно много мороки, да и в тексте процедуры черт ногу сломит потом. Про view и др. я уж не говорю.
3. когда хочу, тогда меняю процедуру для любой БД не глядя на последствия - все равно она вызывается только для этой конкретной БД

И если все же все процедуры одинаковые, неужели труднее их перекопировать для всех БД, чем через левое ухо правой пяткой наворачивать кучу ненужного кода. Вот для администрирования - это да, права раздавать, то, се, там если много процедур, придется их учитывать. А тут, по-моему, проблемы нет.

Самый оптимальный и неработающий после обычного способа - это Use.

А сколько, если не секрет, таких одинаковых процедур.
...
Рейтинг: 0 / 0
По поводу "А как же тогда" собственно по теме
    #32009477
Фотография Garya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Garya Привилегированный пользователь
Участник
1. Настраиваешь репликацию всех таблиц таким образом, чтобы в одной какой-либо базе данных были данные со всех остальных баз данных.
2. На всех базах данных подвешиваешь JOB, который будет отслеживать по совокупности таблиц SYSOBJECTS & SYSCOMMENTS появление новых хранимых процедур или новых редакций старых хранимых процедур. Этот джоб должен переписать текст хранимой процедуры из SYSCOMMENTS в пользовательскую таблицу "специального назначения", данные которой реплицируются так же, как и всех прочих таблиц. В эту же таблицу автоматом подставляемтся имя базы данных, в которой она находится.
3 В центральной БД запускаешь еще один JOB, который выявляет новые хранимые процедуры в твоей "спецтаблице" и повторяет скрипт создания хранимых процедур, только вместо исходного имени хранимой процедуры автоматом формирует составное имя - имя базы данных+имя хранимой процедуры. Так обеспечивается уникальность. Вот в этой-то базе данных все хранимые процедуры и запускаешь. Никаких USE и прочих вычислений, что где производилось и что где запускается. Запускается всегда в одном месте.
...
Рейтинг: 0 / 0
По поводу "А как же тогда" собственно по теме
    #32009484
Fompro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
М.б. я где-то проглядел ...
Почему нельзя собрать все процедуры (всё-таки производительность) в одной базе и для каждой "подбазы" написать IF?
Clipboard вроде работал...
...
Рейтинг: 0 / 0
По поводу "А как же тогда" собственно по теме
    #32009485
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 All
Может я конечно ничего не понимаю, но как я думаю смысл создания реляционных БД и был именно в том, что бы отделить данные от их использования, хотите ООП надстройку, может тогда лучше посмотреть в сторону ОО БД? И не изобретать велосипед?
Не хочется переписывать процедуры отчетов для разных баз? Может тогда лучше придумать СОМ или CORBA? Ну мало ли что эти технологии уже есть, нам ведь нужно


Нда... Свое участие в ветке закрываю, мое мнение наиболее близко к мнению tygra


P.S. А то еще что нибудь напутаю в терминах
...
Рейтинг: 0 / 0
По поводу "А как же тогда" собственно по теме
    #32009491
Фотография Александр Гладченко
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бррр. Я честно пытался всё прочесть... Утром, утром...
...
Рейтинг: 0 / 0
По поводу "А как же тогда" собственно по теме
    #32009504
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Присоединяюсь к Genady
полностью.

А то, глядишь, и до наследования процедур доберемся . А это уже к Oracle.

Свое участие частично закрываю.
З.Ы. 2 Fompro На счет if и clipboard: ну еще проще то по трем БД процедуру перекопировать. И не мучиться потом с процедурами длиной в метр, а в каком ифе у нас чего и как написано.

Но если не лень специально надстройку делать, а еще с репликацией
, то флаг вам в руки. Я лично себе работу пытаюся упростить.
...
Рейтинг: 0 / 0
По поводу "А как же тогда" собственно по теме
    #32009508
cube
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Garya:

Класс!
...
Рейтинг: 0 / 0
40 сообщений из 40, показаны все 2 страниц
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / По поводу "А как же тогда" собственно по теме
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]