我需要一种方法以编程方式获取报表服务器数据库名称。 我可以在服务器管理工作室中打开对象资源管理器,并查看其中的数据库,但是,理想情况下,我需要通过代码获取它并将其返回到变量,以便稍后可以在查询中使用它从该数据库中的视图中获取数据,以防报表服务器数据库名称发生更改, 谢谢。
您可以将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
数据库,请不要担心 - 它无法重命名(或者更确切地说,重命名它会破坏许多其他内容(。
因为报表服务器数据库被视为内部组件。
(来源(