Как выбрать имя базы данных в sys.dm_ * - PullRequest
0 голосов
/ 07 августа 2020

Звоню хранится про c через сервис. Я хотел, чтобы мой сохраненный pro c работал в базе данных. У меня два вопроса:

  1. Указывает ли sys.dm_ * таблицы c для базы данных или это общий?
select * FROM sys.dm_exec_requests

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

Если sys.dm_ * указывает c на базу данных, есть ли способ указать базу данных с помощью хранимой процедуры. Я знаю, что мы не можем использовать use. и select * FROM [dbname].sys.dm_exec_requests похоже не работает. Кажется, он возвращает результат для текущей БД. Я могу ошибаться здесь.

1 Ответ

0 голосов
/ 07 августа 2020

Похоже, что таблицы dm_* глобальны для системы. Оператор select * from [dbname].sys.dm_exec_requests возвращает данные для всех баз данных на сервере. Если таблица содержит данные, указанные в базе данных c, тогда она будет включать поле database_id.

Если вы хотите ограничить данные, возвращаемые вашей хранимой процедурой, только одной базой данных, тогда вы должны квалифицироваться как database_id. Оба следующих оператора работают в хранимых процедурах:

/* specify the database name manually */
declare @db_name sysname = 'master'

select *
from   sys.dm_exec_requests er
       inner join sys.databases d on er.database_id = d.database_id
where  d.name = @db_name

/* gets the database name for the current database */
select *
from   sys.dm_exec_requests er
       inner join sys.databases d on er.database_id = d.database_id
where  d.name = db_name()
...