Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
А как же тогда ?
|
|||
|---|---|---|---|
|
#18+
Доброе время суток! "Сами мы не местные, помжите начинающему кто чем может". Имеется MSSQL Server 2000 (Win 2000) на котором есть 3 БД совершенной идентичной структуры. Требуется написать хранимые процедуры, которые бы что-то возвращали из какой-то из БД. Логично было бы сделать следующим образом: USE <нужная БД> Select ...... from dbo.table1 .... (т.е. не указываем конкретную БД) и в зависимости от условий менять только БД для USE А подлый сервер значится ругается "типа иди подумай как это без USE сделать". (Error 154: a USE database statement is not allowed in a procedure or trigger.) Понятно, что можно сделать через EXECUTE или SP_EXECUTESQL, но это не выход, может кто знает более красивое решение ? С уважение, Михаил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2001, 11:47 |
|
||
|
А как же тогда ?
|
|||
|---|---|---|---|
|
#18+
Нда.... уж..... >есть 3 БД совершенной идентичной структуры. Интересно зачем? >Логично было бы сделать следующим образом: >USE <нужная БД> В процедуре совсем не логично, потому что процедура сама принадлежит БД, и Execute не спасет, потому что запускается в контексте БД, обойти можно только указывая имена БД в запросах. P.S. Интересно что это за задача такая? Не есть ли это страстное желание чесать левое ухо правой пяткой? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2001, 12:06 |
|
||
|
А как же тогда ?
|
|||
|---|---|---|---|
|
#18+
А ежели их в master поместить? И имя начать с sp_...? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2001, 12:10 |
|
||
|
А как же тогда ?
|
|||
|---|---|---|---|
|
#18+
Не очень понятна цель, ну да ладно. Вы спокойно можете использовать вызов SP в виде: CREATE PROC ShellSP1 @DbName varchar(30), @Param1 int, ... AS DECLARE @cmd varchar(50) SELECT @cmd=@DbName + '.dbo.MySP1' EXEC @cmd @Param1,... ----------------------------------- Это не есть динамический вызов, это нормальный вызов RPC (Вы можете туда же впихивать и имя сервера). Вы можете поместить, конечно, эти SP в master, но я бы сделал базу-переходничок только с ними. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2001, 17:37 |
|
||
|
А как же тогда ?
|
|||
|---|---|---|---|
|
#18+
А что если процедуры создавать и редактировать процедуры в только 1-ой базе, в остальные базы их просто копировать (через DTS, job и SQL agent), а выбор базы, из которой будет вызываться процедура определять на клиенте(для ODBC, например, через выбор DSN-a) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.07.2001, 18:30 |
|
||
|
А как же тогда ?
|
|||
|---|---|---|---|
|
#18+
2 N_Michael Объясните, плиз, зачем Вам 3 одинаковых базы на 1-ом серевере? Ну две я еще могу понять, одна оперативная, вторая - архив, но третья то зачем? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2001, 05:16 |
|
||
|
А как же тогда ?
|
|||
|---|---|---|---|
|
#18+
Спасибо за ответы, хотя стало не намного понятней пока. Открываю самую загадочную тайну: с чего Вы решили, что БД одинаковые? я сказал идентичной структуры. Разные БД - это различные торговые фирмы входящие в состав холдинга. Я хотел создать дополнительную БД (так как фирмы могут появляться и исчезать, а измененные процедуры могу и забыть скинуть в какую-нибудь БД) в которо бы и написал всю отчетность(большинство отчетов идентичны для каждой фирмы). Данные в БД могут вноситься во время рабочего дня, а могут и приноситься (если фирма территориально находится далеко). Может будут другие предложения как с наименьшими усилиями получить наилучший результат ? P.S. Лень - "двигатель" прогресса. (С) С уважением, Михаил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.07.2001, 08:34 |
|
||
|
А как же тогда ?
|
|||
|---|---|---|---|
|
#18+
Неужели не у кого не возникало подобной задачи, или все копировали одинаковые SP во все БД? Народ, поделитесь опытом !!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2001, 06:21 |
|
||
|
А как же тогда ?
|
|||
|---|---|---|---|
|
#18+
По-прежнему непонятно, почему нужно заводить несколько баз. Ну, разные фирмы, ну и что ? Зачем несколько баз ? Может быть, недостаточно освещена предметная область, но мне кажется, что в данном случае вполне было достаточно обойтись одной. Добавление/удаление фирм - это добавление/удаление записей в таблицах, не более того. И никакого гемора с синхронизацией sp. То есть у меня сильные сомнения в разумной структуре БД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2001, 06:31 |
|
||
|
А как же тогда ?
|
|||
|---|---|---|---|
|
#18+
Удивительное дело... Вот Вам парочка примеров, для чего могут понадобиться базы с одинаковой структурой: 1. Для лучшего разделения прав доступа. (вспомните про мультиинстанс - это ещё круче) 2. Если пользователям нужны только их данные, зачем им лопатить данные других организаций. Т.е. сокращение времени выборки и отклика. 3. Увеличение производительности - хотя бы за счёт того, что файлы баз и журналов можно положить на независимые от других баз данных носители. Думаю, плюсов ещё можно понавыдумывать, как говорится: "Разделяй и властвуй..." Размещение данных в одной или нескольких базах данных ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2001, 06:41 |
|
||
|
А как же тогда ?
|
|||
|---|---|---|---|
|
#18+
2 N_Michael Александр Гладченко ОК, почему разные БД в общем стало понятно, но возникает тут же другой вопрос а зачем делать общие SP? Что при таком подходе можно выиграть? 2 N_Michael А чем плох вариант с копированием? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2001, 07:17 |
|
||
|
А как же тогда ?
|
|||
|---|---|---|---|
|
#18+
2 N_Michael & Александр Гладченко: не скажу, что вы меня убедили насчет целесообразности наличия нескольких баз. >Думаю, плюсов ещё можно понавыдумывать - вот именно, повыдумывать! Этим все сказано. Ежики плакали, кололись, но ели кактус. Хорошо, оставим вопрос теоретический и вернемся к практическому. N_Michael, где в вашем случае определяется, с какой базой идет работа - на SQL сервере или на клиенте ? Есть ли необходимость из хранимой процедуры в базе БД1 вызывать процедуру или работать с данными из БД2 ? Иными словами, базы "замкнуты на себя" или общаются между собой ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2001, 07:31 |
|
||
|
А как же тогда ?
|
|||
|---|---|---|---|
|
#18+
Не совсем понятно, чем Вам не нравится EXECUTE Маленькая выдержка из системной сохраненки sp_adddistributiondb SELECT @command = 'USE master CREATE DATABASE ' + QUOTENAME(@database) + isnull(@on_clause, ' ') + isnull(@logon_clause, ' ') EXEC (@command) IF @@ERROR <> 0 RETURN (1) EXEC используют довольно многие системные сохраненки Кстати из опыта работы с ASP и PHP, лучше всего сначала собирать полностью весь HTML код и только потом только выдавать клиенту. Может это Ваш случай ?? Удачи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2001, 07:31 |
|
||
|
А как же тогда ?
|
|||
|---|---|---|---|
|
#18+
Вообще желание понятно. Лучше когда процедура одна. Если что - её надо будет менять только в одном месте. Но реализовать это по-хорошему скорее всего не получиться - базу как параметр не передать. Я бы еше предложил вариант такой: в базе "с процедурами" создать на каждую таблицу из "баз с данными" view примерно такого вида: create view table1 as select 'base1' base, * from base1..table1 union select 'base2' , * from base2..table1 ... и т.д. тогда в процедурах надо будет писать примерно так: create proc proc1 @base varchar(99) as select ... from table1 where base=@base and ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2001, 07:44 |
|
||
|
А как же тогда ?
|
|||
|---|---|---|---|
|
#18+
2Genady: Предпологалось создать новую базу данных, в которой будут храниться SP и настроечные таблицы, необходимые для отчетов (они для всех БД одинаковы и не хотелось бы и их тоже копировать). 2GreenSunrise: 1.Одна фирма - одна база, это потому, что так исторически сложилось и на текущем этапе никто не будет переделывать, т.к. переписывать клиентскую программу очень долго (т.к. это смена идеологии), может быть в дальнейшем, хотя вряд ли. Бизнес логика внутри каждой БД может отличаться, хотя и незначительно, на при этом отчеты все равно формируются по одни и темже правилам. 2.Да если и такие отчеты, товар - деньши могут ходить между фирмами, но есть отчеты и другие (например книга покупок, книга продаж, остатки товара на какую дату и т.д.) который одинаково работают во всех БД и данные из других баз не используют. 2 ALL: Этот вариант со созданием дополнительной БД для "отчетов по всем фирмам" кажется наиболее предпочтительным, но готовы изменить свое мнение если кто-то предложит более рациональное решение, для этого собственно и начинался это топик. Наверняка не только у мне возникла такая проблема, многим это решение будет очень интересным. 2Дмитрий Голубев: Это одно из решений, но я помню что там мне бы пришлось поизвращаться в каком-то случае (конкретнее не помню), это проблема уже обсуждалась здесь месяца 4 назад и приемлемого решения так и не нашли. -Можно еще через View'вы решить проблему (но в этом случае для каждого придется генерить уникальное имя и затем без EXEC уже не обойтись ) -Можно через курсоры, но это не очень оптимально по скорости выполнения. Цель данного топика найти ОПТИМАЛЬНО решение данной проблемы. Если нужна еще какая-то информация для полноты проблемы, то не стесняйтесь - спрашивайте Жду предложений. С уважением, Михаил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2001, 07:59 |
|
||
|
А как же тогда ?
|
|||
|---|---|---|---|
|
#18+
Понятно. Если есть большой сложившийся проект, то часть вопросов отпадает. А что, SergSuper предложил интересный вариант. Набить базу-переходник такими вот вьюхами и вроде как все срастется. Ну можно предложить наладить репликацию, а в ней в качестве статей указать только sp, view и т.д., причем чтобы только определения копировались, а не выполнение. Хотя этот вариант кажется более громоздким, и работать будет только на 2000. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2001, 08:17 |
|
||
|
А как же тогда ?
|
|||
|---|---|---|---|
|
#18+
Да в варианте SergSuper что-то есть, но : 1. Как он из View'а будет данные выбирать (я именю ввиду внутреннюю работу) ? сначала склеит в курсоа, а затем из него будет выбирать, это слишком долго, т.к. скорость заполнения наибольших таблиц базы примерно 100 тыс. записей в месяц (или как-то можно заставить его лазить только в одну БД по которой выбираешь ?) 2. А как быть если у юзера разрешение только на БД с отчетами и БД его фирмы, а БД остальных фирм для него закрыты (зачем ему лазить в другие БД? для него информация о др. фирмах закрыта) как здесь быть ?. Вобщем вопрос остается открытым. С уважение, Михаил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2001, 10:51 |
|
||
|
А как же тогда ?
|
|||
|---|---|---|---|
|
#18+
Есть еще вариант: Для каждой БД создать свою БД с SP. В SP к таблицам обращаться [имя бд]..[имя таблицы] Разработку вести на одной БД с SP. Для переноса процедур в другие БД формировать текстовый скрипт, а перед выполнением скрипта делать контекстную замену [имя бд1] на [имя бд2] При этом каждый пользователь имет права только к одной БД с SP. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2001, 11:46 |
|
||
|
А как же тогда ?
|
|||
|---|---|---|---|
|
#18+
2 N_Michael Все же не вижу в Вашем случае проблемы, точнее по моему мнению Ва сейчас занимаетесь созданием себе проблемы Поясню почему я так думаю. У Вас есть три совершенно самостоятельные базы, более того бизнес правила в них как я понял отличаются и лишь отчеты схожи. Создавая универсальные процедуры Вы должны будете учитывать и различия, даже если они сейчас незначительны. Вот у меня и возникает вопрос, что Вы будете делать если отличия станут больше? Ставить побольше ифов? Насколько я понял у Вас стоят базы трех различных фирм, а если еще добавится такая фирма у которой отчеты будут другими? Будете для этой фирмы писать процедуры в ее базе? По моему из этой затеи может получится каша какая то В общем кому что нравится, но лично я бы все же писал бы процедуры для каждой базы, а для автоматизации использовал бы лучше Power Designer там есть возможность создавать шаблоны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2001, 12:02 |
|
||
|
А как же тогда ?
|
|||
|---|---|---|---|
|
#18+
Genady, шаблоны чего? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.07.2001, 14:17 |
|
||
|
А как же тогда ?
|
|||
|---|---|---|---|
|
#18+
2 Crot Шаблоны триггеров и процедур. В Power Designer есть возможность создовать довольно удобные шаблоны с использованием макросов и переменных дезайнера, хотя конечно без глюков не обошлось. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2001, 05:37 |
|
||
|
А как же тогда ?
|
|||
|---|---|---|---|
|
#18+
Genady, покажите мне пункт меню в PD из которого можно создать шаблоны процедур? Кстати, "дезайнер" пишется дизайнер. Ну а с с глюками... Если ЗНАТЬ для чего и как использовать PD, то какие глюки? Вообще, советую Вам больше думать, прежде чем отвечать - Вам ведь могут поверить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.07.2001, 14:19 |
|
||
|
А как же тогда ?
|
|||
|---|---|---|---|
|
#18+
Как правильно заметили "лишнее" поле в ключевых таблицах и все нормально. Разделить права это просто на запуск и ограничить права на выборку. Про скорость, а какие размеры???????? И вообщето есть такая вещь как Index... У меня уже 6 фирм, одна база. Moth. moth@mail.primorye.ru ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2001, 02:31 |
|
||
|
А как же тогда ?
|
|||
|---|---|---|---|
|
#18+
>Кстати, "дезайнер" пишется дизайнер. Нехорошо-с, у Вас очепяток что ли не бывает А что касается пункта меню, Database -> Edit Current DBMS -> Script -> Objects -> Procedure Вписывает там в шаблон чего хотите Если хотите могу документик выслать, там я правда прошелся только по шаблонам триггеров, но все равно интересно я думаю будет, дайте только адресок, кстати предопределенный шаблон на каскадный update там с ошибкой, работает правильно только если апдейтится 1 запись. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2001, 05:19 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32008943&tid=1826235]: |
0ms |
get settings: |
7ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
27ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
64ms |
get tp. blocked users: |
1ms |
| others: | 221ms |
| total: | 347ms |

| 0 / 0 |
