SSRS如何在不对报表查询中的数据库名称进行硬编码的情况下执行跨数据库连接

时间:2013-10-29 16:46:38

标签: sql reporting-services datasource

我有一份SSRS报告,它连接到查询中的两个数据库。

SELECT table
FROM MainDB1.DBO.Table AS table1
JOIN MainDB2.DBO.Table AS table2 ON table1.ID = table2.ID

使用SSRS数据源连接到其服务器。当我想编辑报告时,我必须在单独的服务器上进行编辑,此服务器具有相同的数据库,但它们的名称不同。

我必须手动编辑查询,使其能够更改报告

SELECT table
FROM DevDB1.DBO.Table AS table1
JOIN DevDB2.DBO.Table AS table2 ON table1.ID = table2.ID

每个报表服务器数据源都是相同的名称,并在报表中引用。

数据集中有没有办法加入这两个数据库?或者有没有人有自己的方法来处理这个问题?它会使这个过程更有效率。

由于

1 个答案:

答案 0 :(得分:0)

您应该遵循Michael Fredrickson的建议,即在您的环境中使用一致的命名,并使用服务器别名来保持链接服务器的一致性。

话虽如此,考虑到你的环境是这样的,我建议你有一个基于表达式的Sql语句,它使用隐藏的参数来实现你想要的。因此设置两个隐藏的字符串参数:

@Db1默认为DevDB1@Db2默认为DevDb2

现在为Sql语句使用以下表达式:

="SELECT table "
&"FROM " + Parameters!Db1.Value + ".DBO.Table AS table1 "
&"JOIN " + Parameters!Db2.Value + ".DBO.Table AS table2 ON table1.ID = table2.ID"

这将根据数据库参数的值构建正确的Sql。

部署到Reporting Services服务器后,转到服务器并编辑参数:

@Db1默认为MainDB1@Db2默认为MainDB2

随后重新部署报表时,本地参数默认值不会覆盖服务器上已更改的默认值,因此这些服务器值将保留为您设置的值。

当人们运行报告时,他们将看不到隐藏的参数。它们只是在本地有不同的设置用于开发和服务器上的生产。