powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / А как же тогда ?
32 сообщений из 32, показаны все 2 страниц
А как же тогда ?
    #32008771
N_Michael
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброе время суток!

"Сами мы не местные, помжите начинающему кто чем может".
Имеется 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, но это не выход,
может кто знает более красивое решение ?

С уважение, Михаил.
...
Рейтинг: 0 / 0
А как же тогда ?
    #32008773
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нда.... уж.....
>есть 3 БД совершенной идентичной структуры.
Интересно зачем?

>Логично было бы сделать следующим образом:
>USE <нужная БД>

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

P.S. Интересно что это за задача такая? Не есть ли это страстное желание чесать левое ухо правой пяткой?
...
Рейтинг: 0 / 0
А как же тогда ?
    #32008775
Alexander Chepack
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А ежели их в master поместить? И имя начать с sp_...?
...
Рейтинг: 0 / 0
А как же тогда ?
    #32008804
Fompro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не очень понятна цель, ну да ладно. Вы спокойно можете использовать вызов 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, но я бы сделал базу-переходничок только с ними.
...
Рейтинг: 0 / 0
А как же тогда ?
    #32008807
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что если процедуры создавать и редактировать процедуры в только 1-ой базе, в остальные базы их просто копировать (через DTS, job и SQL agent), а выбор базы, из которой будет вызываться процедура определять на клиенте(для ODBC, например, через выбор DSN-a)
...
Рейтинг: 0 / 0
А как же тогда ?
    #32008822
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>А ежели их в master поместить? И имя начать с sp_...?
Умгу, и таблицы туда же
...
Рейтинг: 0 / 0
А как же тогда ?
    #32008823
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 N_Michael

Объясните, плиз, зачем Вам 3 одинаковых базы на 1-ом серевере? Ну две я еще могу понять, одна оперативная, вторая - архив, но третья то зачем?
...
Рейтинг: 0 / 0
А как же тогда ?
    #32008851
N_Michael
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за ответы, хотя стало не намного понятней пока.
Открываю самую загадочную тайну:
с чего Вы решили, что БД одинаковые? я сказал идентичной структуры.
Разные БД - это различные торговые фирмы входящие в состав холдинга.
Я хотел создать дополнительную БД (так как фирмы могут появляться и исчезать,
а измененные процедуры могу и забыть скинуть в какую-нибудь БД) в которо бы и
написал всю отчетность(большинство отчетов идентичны для каждой фирмы).
Данные в БД могут вноситься во время рабочего дня, а могут и приноситься (если фирма
территориально находится далеко). Может будут другие предложения как с наименьшими
усилиями получить наилучший результат ?

P.S. Лень - "двигатель" прогресса. (С)

С уважением, Михаил.
...
Рейтинг: 0 / 0
А как же тогда ?
    #32008931
N_Michael
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Неужели не у кого не возникало подобной задачи, или все копировали одинаковые SP во все БД? Народ, поделитесь опытом !!!
...
Рейтинг: 0 / 0
А как же тогда ?
    #32008934
GreenSunrise
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По-прежнему непонятно, почему нужно заводить несколько баз. Ну, разные фирмы, ну и что ? Зачем несколько баз ? Может быть, недостаточно освещена предметная область, но мне кажется, что в данном случае вполне было достаточно обойтись одной. Добавление/удаление фирм - это добавление/удаление записей в таблицах, не более того. И никакого гемора с синхронизацией sp. То есть у меня сильные сомнения в разумной структуре БД.
...
Рейтинг: 0 / 0
А как же тогда ?
    #32008935
Фотография Александр Гладченко
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Удивительное дело... Вот Вам парочка примеров, для чего могут понадобиться базы с одинаковой структурой:
1. Для лучшего разделения прав доступа. (вспомните про мультиинстанс - это ещё круче)
2. Если пользователям нужны только их данные, зачем им лопатить данные других организаций. Т.е. сокращение времени выборки и отклика.
3. Увеличение производительности - хотя бы за счёт того, что файлы баз и журналов можно положить на независимые от других баз данных носители.

Думаю, плюсов ещё можно понавыдумывать, как говорится: "Разделяй и властвуй..."

Размещение данных в одной или нескольких базах данных
...
Рейтинг: 0 / 0
А как же тогда ?
    #32008939
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 N_Michael
Александр Гладченко

ОК, почему разные БД в общем стало понятно, но возникает тут же другой вопрос а зачем делать общие SP?
Что при таком подходе можно выиграть?

2 N_Michael
А чем плох вариант с копированием?
...
Рейтинг: 0 / 0
А как же тогда ?
    #32008943
GreenSunrise
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 N_Michael & Александр Гладченко: не скажу, что вы меня убедили насчет целесообразности наличия нескольких баз.
>Думаю, плюсов ещё можно понавыдумывать
- вот именно, повыдумывать! Этим все сказано. Ежики плакали, кололись, но ели кактус.

Хорошо, оставим вопрос теоретический и вернемся к практическому. N_Michael, где в вашем случае определяется, с какой базой идет работа - на SQL сервере или на клиенте ? Есть ли необходимость из хранимой процедуры в базе БД1 вызывать процедуру или работать с данными из БД2 ? Иными словами, базы "замкнуты на себя" или общаются между собой ?
...
Рейтинг: 0 / 0
А как же тогда ?
    #32008944
Не совсем понятно, чем Вам не нравится 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 код и только потом только выдавать клиенту.
Может это Ваш случай ??

Удачи
...
Рейтинг: 0 / 0
А как же тогда ?
    #32008951
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще желание понятно. Лучше когда процедура одна. Если что - её надо будет менять только в одном месте. Но реализовать это по-хорошему скорее всего не получиться - базу как параметр не передать.

Я бы еше предложил вариант такой: в базе "с процедурами" создать на каждую таблицу из "баз с данными" 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 ...
...
Рейтинг: 0 / 0
А как же тогда ?
    #32008956
N_Michael
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2Genady:
Предпологалось создать новую базу данных, в которой будут храниться SP и настроечные таблицы, необходимые для отчетов (они для всех БД одинаковы и не хотелось бы и их тоже копировать).

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

2 ALL: Этот вариант со созданием дополнительной БД для "отчетов по всем фирмам" кажется наиболее предпочтительным, но готовы изменить свое мнение если кто-то предложит более рациональное решение, для этого собственно и начинался это топик. Наверняка не только у мне возникла такая проблема, многим это решение будет очень интересным.

2Дмитрий Голубев:
Это одно из решений, но я помню что там мне бы пришлось поизвращаться в каком-то случае (конкретнее не помню), это проблема уже обсуждалась здесь месяца 4 назад и приемлемого решения так и не нашли.

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

Цель данного топика найти ОПТИМАЛЬНО решение данной проблемы.
Если нужна еще какая-то информация для полноты проблемы, то не стесняйтесь - спрашивайте

Жду предложений.

С уважением, Михаил.
...
Рейтинг: 0 / 0
А как же тогда ?
    #32008957
GreenSunrise
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Понятно. Если есть большой сложившийся проект, то часть вопросов отпадает.
А что, SergSuper предложил интересный вариант. Набить базу-переходник такими вот вьюхами и вроде как все срастется.
Ну можно предложить наладить репликацию, а в ней в качестве статей указать только sp, view и т.д., причем чтобы только определения копировались, а не выполнение. Хотя этот вариант кажется более громоздким, и работать будет только на 2000.
...
Рейтинг: 0 / 0
А как же тогда ?
    #32008966
N_Michael
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да в варианте SergSuper что-то есть, но :
1. Как он из View'а будет данные выбирать (я именю ввиду внутреннюю работу) ? сначала склеит в курсоа, а затем из него будет выбирать, это слишком долго, т.к. скорость заполнения наибольших таблиц базы примерно 100 тыс. записей в месяц (или как-то можно заставить его лазить только в одну БД по которой выбираешь ?)
2. А как быть если у юзера разрешение только на БД с отчетами и БД его фирмы, а БД остальных фирм для него закрыты (зачем ему лазить в другие БД? для него информация о др. фирмах закрыта) как здесь быть ?.

Вобщем вопрос остается открытым.

С уважение, Михаил.
...
Рейтинг: 0 / 0
А как же тогда ?
    #32008969
VadimB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть еще вариант:
Для каждой БД создать свою БД с SP.
В SP к таблицам обращаться [имя бд]..[имя таблицы]
Разработку вести на одной БД с SP.
Для переноса процедур в другие БД формировать текстовый скрипт,
а перед выполнением скрипта делать контекстную замену [имя бд1] на [имя бд2]
При этом каждый пользователь имет права только к одной БД с SP.
...
Рейтинг: 0 / 0
А как же тогда ?
    #32008971
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 N_Michael

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

Поясню почему я так думаю.
У Вас есть три совершенно самостоятельные базы, более того бизнес правила в них как я понял отличаются и лишь отчеты схожи. Создавая универсальные процедуры Вы должны будете учитывать и различия, даже если они сейчас незначительны. Вот у меня и возникает вопрос, что Вы будете делать если отличия станут больше? Ставить побольше ифов?
Насколько я понял у Вас стоят базы трех различных фирм, а если еще добавится такая фирма у которой отчеты будут другими? Будете для этой фирмы писать процедуры в ее базе?
По моему из этой затеи может получится каша какая то


В общем кому что нравится, но лично я бы все же писал бы процедуры для каждой базы, а для автоматизации использовал бы лучше Power Designer там есть возможность создавать шаблоны.
...
Рейтинг: 0 / 0
А как же тогда ?
    #32008981
Crot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Genady, шаблоны чего?
...
Рейтинг: 0 / 0
А как же тогда ?
    #32009004
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Crot
Шаблоны триггеров и процедур. В Power Designer есть возможность создовать довольно удобные шаблоны с использованием макросов и переменных дезайнера, хотя конечно без глюков не обошлось.
...
Рейтинг: 0 / 0
А как же тогда ?
    #32009068
Crot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Genady, покажите мне пункт меню в PD из которого можно создать шаблоны процедур?
Кстати, "дезайнер" пишется дизайнер.
Ну а с с глюками... Если ЗНАТЬ для чего и как использовать PD, то какие глюки?
Вообще, советую Вам больше думать, прежде чем отвечать - Вам ведь могут поверить
...
Рейтинг: 0 / 0
А как же тогда ?
    #32009109
Moth
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как правильно заметили "лишнее" поле в ключевых таблицах и все нормально.
Разделить права это просто на запуск и ограничить права на выборку.
Про скорость, а какие размеры???????? И вообщето есть такая вещь как Index...
У меня уже 6 фирм, одна база.

Moth.
moth@mail.primorye.ru
...
Рейтинг: 0 / 0
А как же тогда ?
    #32009115
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Кстати, "дезайнер" пишется дизайнер.
Нехорошо-с, у Вас очепяток что ли не бывает


А что касается пункта меню, Database -> Edit Current DBMS -> Script -> Objects -> Procedure
Вписывает там в шаблон чего хотите

Если хотите могу документик выслать, там я правда прошелся только по шаблонам триггеров, но все равно интересно я думаю будет, дайте только адресок, кстати предопределенный шаблон на каскадный update там с ошибкой, работает правильно только если апдейтится 1 запись.
...
Рейтинг: 0 / 0
А как же тогда ?
    #32009120
Фотография Александр Гладченко
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаспада грофоманы! Если Вы заметели у когонибудь ошибку, чирканите мне, я её тиха изправлю. И некаму не будет стыдна...
...
Рейтинг: 0 / 0
А как же тогда ?
    #32009121
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Александр Гладченко
...
Рейтинг: 0 / 0
А как же тогда ?
    #32009225
Crot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Слово “шаблон” в PowerDesigner имеет определённую семантику. Оно означает именнованный объект, семантически законченный (не требующий написания дополнительного кода), т.е. пригодный для немедленного использования. Такими объектами в PowerDesigner являютя только шаблоны тригеров и элементов тригеров.
Всё, что лежит в DBMS – комманды базы данных, которые могут быть скорректированы под нужды пользователя. Эти команды создают, удаляют и т.д. разные объекты БД, необязательно хранимые процедуры.
Графоманы – это наверное те, которые пишут о том, чего сами не понимают...
...
Рейтинг: 0 / 0
А как же тогда ?
    #32009228
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Crot
Не понял чем вызвана ваша воинственность

По поводу семантики.
>Вообще, советую Вам больше думать, прежде чем отвечать - Вам ведь могут поверить
Конечно, могут поверить и мне, а могут поверить и хелпу

Templates for the creation of stored procedures and functions are defined in the current DBMS. You can modify these templates .

Modifying the DBMS
When you modify the templates for stored procedures and functions, you modify the current DBMS. It is recommended that you only edit or modify a copy of a DBMS that is shipped with PowerDesigner.

¨ To define a template for stored procedures or functions:

1 Select DatabaseEdit Current DBMS.

The DBMS property sheet opens to the General page.

2 Expand the Script node in the DBMS tree view.

Expand the Objects node.

3 Expand the Procedure node.

or

Expand the Function node.

4 Click CustomProc to edit the stored procedure template.

or

Click CustomFunc to edit the function template.

The Value textbox to the right of the tree view displays the template.

5 Type changes to the template.
6 Click OK.
...
Рейтинг: 0 / 0
А как же тогда ?
    #32009238
Genady
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Crot
Понял что Вы хотели сказать.
Да, шаблон процедуры определенный в DBMS является шаблоном для всех процедур в модели, в то время как для триггера можно создавать шаблоны как объекты модели.
Вот только почему шаблон в DBMS я не могу называть шаблоном, непонятно.
...
Рейтинг: 0 / 0
А как же тогда ?
    #32009266
Crot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Шаблоны хранимых процедур и триггеров имеют принципиально разную природу. Шаблон хранимой процедур - это скорее шаблон оператора создания хранимой процедуры, также как и шаблон оператора создания таблицы, например.Их не может быть несколько, у них нет имен, ими нельзя управлять каким-то образом (выбирать их при создании хранимой процедуры), это неработающий код. Шаблоны триггеров - именнованые работающие объекты, к которым вы можете обращаться по своему усмотрению.Они могут реализовывать разные алгоритмы. И в меню PD нельзя найти пункта создания и хранения шаблона хранимой процедуры как именованного объекта. Валить в кучу такие разные понятия нельзя. Тем более человек вообще не об этом спрашивает. Вот и всё, что я хотел сказать. Считаю, что вопрос закрыт. По крайней мере для меня.
...
Рейтинг: 0 / 0
А как же тогда ?
    #32009270
Фотография Александр Гладченко
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поддерживаю Crot. Ветка уже непомерно большая, а сервер наш, увы, не резиновый. Если есть желание продолжить дискуссию, прошу милостиво открыть новый топик.
...
Рейтинг: 0 / 0
32 сообщений из 32, показаны все 2 страниц
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / А как же тогда ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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