如何在SSRS报告中将数据库名称作为参数传递

时间:2014-05-15 19:41:19

标签: reporting-services

我的要求是我想传递“在SSRS报告中使用databasename作为参数”。

当用户运行报告系统时,系统将要求从参数列表中选择数据库名称,并从“从sys.databases中选择名称”中重新检索这些值

一旦用户从必须传递给的值的参数中选择值 “use databasename”[参数中的数据库名称值]

例如:参数名称:@ param1 所以在报告SQL Query中我可以使用像“use @ param1”go和select statement

有可能吗?请指教。

1 个答案:

答案 0 :(得分:0)

您可以动态构建查询并使用sp_executesql来运行它 下面是一个示例,我使用它来返回参数@DatabaseName

中传递的给定数据库名称的表,视图,存储过程和函数的列表
DECLARE @SQLScript nvarchar(4000)

SET @SQLScript = 
'USE ' +@DatabaseName + 
'SELECT 
    S.name as SchemaName,
    O.name as ObjectName,
    O.Type,
    REPLACE(O.type_desc,''_'','' '') as TypeDescription,
    O.create_date as CreatedDate,
    O.modify_date as ModifiedDate
FROM 
    sys.objects O
JOIN
    sys.schemas S
    ON
    O.schema_id = S.schema_id
WHERE
    O.type IN (''FN'',''IF'',''P'',''TF'',''U'',''V'') '

EXECUTE sp_executesql @SQLScript


另一种方法是使用嵌入式连接创建数据源(这不适用于共享数据源引用)并将连接字符串构建为表达式。

从数据源属性确保选中嵌入式连接,单击表达式(fx)按钮并构建连接字符串,但在参数(我的示例中为DatabaseName)中替换初始目录值。

="Data Source=YourServerName;Initial Catalog=" + Parameters!DatabaseName.Value

设置基于表达式的连接字符串后,无法再在设计时对其进行评估。当您创建数据集时,您将无法在“查询设计器”中运行任何查询,也无法在“数据集属性”中刷新字段。这不是一个主要问题,只需使用常规连接字符串,一旦报告正在运行,就将其切换为基于表达式的表达式。

您也可以使用此方法将服务器名称作为参数传递。