powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как в ХП узнать БД, из которой ХП была вызвана?
13 сообщений из 13, страница 1 из 1
Как в ХП узнать БД, из которой ХП была вызвана?
    #40099239
valv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
добрый день,

Как в ХП узнать БД, из которой ХП была вызвана?

Ситуация такая:
на отдном инстансе, есть 400 баз данных:
Код: sql
1.
2.
3.
4.
DM_Hospital001
DM_Hospital002
...
DM_Hospital400

из которых вызывается ХП из БД [Common]:
Код: sql
1.
2.
use DM_Hospital400
exec Common.tool.LogOperation @OpId, @OpDesc


внутри этой ХП необходимо узнать, из какой БД она была вызвана.

запросы типа
Код: sql
1.
2.
3.
select DB_Name(), 
select * from sys.sysprocesses
where spid = @@SPID

возвращают БД [Common], тогда как требуется узнать, что ХП была вызвана из БД [DM_Hospital400].
Код: sql
1.
dbcc inputbuffer(@@SPID)

тоже не помог

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

версии MS SQL Server 2016 и 2019
спасибо.
...
Рейтинг: 0 / 0
Как в ХП узнать БД, из которой ХП была вызвана?
    #40099263
Alexander Us
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
valv,

тынц?
...
Рейтинг: 0 / 0
Как в ХП узнать БД, из которой ХП была вызвана?
    #40099265
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
valv
Как в ХП узнать БД, из которой ХП была вызвана?
Никак
...
Рейтинг: 0 / 0
Как в ХП узнать БД, из которой ХП была вызвана?
    #40099266
Alexander Us
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexander Us
valv,

тынц?


Пожалуйста игнорируйте мой пост.
...
Рейтинг: 0 / 0
Как в ХП узнать БД, из которой ХП была вызвана?
    #40099268
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexander Us
valv,

тынц?


нумерация объектов в базах сиквела не сквозная
procid = 100 в разных базах указывает на разные процедуры

разве что, если с 400 базами работают разные логины, у которых прописана своя default db (одна из тех 400)
...
Рейтинг: 0 / 0
Как в ХП узнать БД, из которой ХП была вызвана?
    #40099269
Alexander Us
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Как в ХП узнать БД, из которой ХП была вызвана?
    #40099270
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
valv,

сохраняйте инфо в session_context или context_info
...
Рейтинг: 0 / 0
Как в ХП узнать БД, из которой ХП была вызвана?
    #40099280
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
еще можно воспользоваться original_db_name() но только в том случае если вы гарантированно знаете что пользователи не перебегают между базами в процессе своих запросов.
...
Рейтинг: 0 / 0
Как в ХП узнать БД, из которой ХП была вызвана?
    #40099301
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
valv,

может и не надо об этом знать?

авторХП вызывается из многих программ
авторбыла вызвана из БД
Вы явно путаетесь в показаниях.
...
Рейтинг: 0 / 0
Как в ХП узнать БД, из которой ХП была вызвана?
    #40099325
Фотография a_voronin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm
valv
Как в ХП узнать БД, из которой ХП была вызвана?
Никак


Можно ли предложить систему отслеживания, например проставив некий код в начале всех процедур?
...
Рейтинг: 0 / 0
Как в ХП узнать БД, из которой ХП была вызвана?
    #40099352
valv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость

Alexander Us,
спасибо большое,
вариант с sys.dm_tran_locks.resource_database_id работает.
...
Рейтинг: 0 / 0
Как в ХП узнать БД, из которой ХП была вызвана?
    #40099406
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
valv
вариант с sys.dm_tran_locks.resource_database_id работает.
Этот способ не гарантирует правильный результат.
...
Рейтинг: 0 / 0
Как в ХП узнать БД, из которой ХП была вызвана?
    #40099428
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
valv,

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

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


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