0

我正在通过服务调用存储过程。我希望我的存储过程在数据库上运行。我有两个问题

  1. sys.dm_* 表是特定于数据库的还是通用的?
select * FROM sys.dm_exec_requests

上述查询是返回所有数据库的请求还是正在执行查询的当前数据库?

  1. 如果 sys.dm_* 特定于数据库,有没有办法通过存储过程指定数据库。我知道我们不能使用use. 并且select * FROM [dbname].sys.dm_exec_requests似乎不起作用。它返回当前数据库的结果。我在这里可能错了。
4

1 回答 1

0

看起来这些dm_*表对系统来说是全局的。该语句select * from [dbname].sys.dm_exec_requests返回服务器上所有数据库的数据。如果表包含特定于数据库的数据,那么它将包含一个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()
于 2020-08-07T06:15:44.633 回答