我需要一种以编程方式获取报表服务器数据库名称的方法。 我可以在Server Management Studio中打开对象资源管理器,并在那里查看数据库,但是,理想情况下我需要通过代码获取它并将其返回到变量,以便稍后在我的查询中使用它来从中获取数据如果报表服务器数据库名称发生变化,请在该数据库中查看,谢谢。
答案 0 :(得分:1)
您可以使用 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 |
+---------+
Finnaly,如果数据库恢复或重新创建,则可以更改database_id
。
答案 1 :(得分:0)
这是使用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
我也read this blog though about this proc。这假设没有用户数据库具有该对象(在本例中为proc)CreateDataDrivenNotification
这是我认为非常独特的。你可以检查其他人,使其更多"防弹"比如SetDrillthroughReports
答案 2 :(得分:0)
如果您正在讨论报告所针对的数据库,请像其他人建议的那样使用DB_NAME()
。
如果您正在谈论ReportServer
数据库,请不要担心 - 它无法重命名(或者说,重命名它会破坏许多其他内容)。
不支持重命名报表服务器数据库,因为报表服务器数据库被视为内部组件。
(source)