以编程方式获取 SSRS 数据库名称



我需要一种方法以编程方式获取报表服务器数据库名称。 我可以在服务器管理工作室中打开对象资源管理器,并查看其中的数据库,但是,理想情况下,我需要通过代码获取它并将其返回到变量,以便稍后可以在查询中使用它从该数据库中的视图中获取数据,以防报表服务器数据库名称发生更改, 谢谢。

您可以将DB_NAME()用作:

SELECT DB_NAME();
ALTER DATABASE OldName MODIFY NAME = NewName;
SELECT DB_NAME(); --Get the name even after the db name has been changed

从在线文档:

database_id 要返回的数据库的标识号 (ID(。database_id 是 int,没有默认值。如果未指定 ID,则返回当前数据库名称。

所以你可能需要通过database_id才能得到你想要的东西。

例如:

SELECT DB_NAME(1) AS DB_Name;

返回:

+---------+
| DB_Name |
+---------+
| master  |
+---------+

当然,如果数据库恢复或重新创建,则可以更改database_id

这是一种使用sp_MSforeachdb的方法

create table #myDatabases (dbname sysname)
insert into #myDatabases
exec master.sys.sp_MSforeachdb 'USE [?]; select db_name() where exists (select 1 from sys.objects where name = ''CreateDataDrivenNotification'')'
select * from #myDatabases where dbname is not null
drop table #myDatabases

我也读过这个关于这个过程的博客。 这假设没有用户数据库具有对象(在本例中为 proc(,CreateDataDrivenNotification我认为这是非常独特的。您可以检查其他人以使其更"防弹",就像SetDrillthroughReports

如果您谈论的是运行报告的数据库,请使用其他人建议的DB_NAME()

如果您谈论的是ReportServer数据库,请不要担心 - 它无法重命名(或者更确切地说,重命名它会破坏许多其他内容(。

不支持重命名报表服务器数据库,

因为报表服务器数据库被视为内部组件。

(来源(

最新更新