您可以动态构建查询并使用 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) 按钮并构建您的连接字符串,但用您的参数(在我的示例中为数据库名称)替换初始目录值。
="Data Source=YourServerName;Initial Catalog=" + Parameters!DatabaseName.Value
一旦您设置了基于表达式的连接字符串,就无法在设计时对其进行评估。当您开始创建数据集时,您将无法在查询设计器中运行任何查询或刷新数据集属性中的字段。不是主要问题,只需使用常规连接字符串,一旦报告工作,将其切换为基于表达式的连接字符串。
您也可以使用此方法将服务器名称作为参数传递。