提问人:Sanjay Chaudhary 提问时间:11/4/2023 最后编辑:marc_sSanjay Chaudhary 更新时间:11/5/2023 访问量:46
使用存储过程将两个数据源合并为一个 SSRS 报表中的数据源
Combine two data sources into one data source inside SSRS report using a stored procedure
问:
我正在尝试构建将从两个不同服务器获取数据的 SSRS 报告。
我已经创建了一个在 Management Studio 中运行时工作正常的存储过程,但是当我从 SSRS 报表生成器调用它时,该存储过程不起作用。
这是我的存储过程中的 SQL 查询:
Select
serv1.PatientName, serv1.DoctorName,
serv2.HospitalName, serv2.DoctorDegree
from
server1.database1.tblPatient serv1
inner join
server2.database2.tbldoctor serv2 on serv2.PatientID = serv1.PatientID
where
serv2.PatientID = 2
请考虑上面的查询只是示例。由于存储过程工作正常。我还创建了两个连接完全正常的数据源。
主要问题是如何在 SSRS 报表中将两个数据源连接到单个数据源?
答:
这确实需要在 SSRS 之外进行管理。在 SSRS 中将多个数据源合并到单个表中的任何技术都不是很好或推荐的。因此,如果您可以直接从一台服务器查询到另一台服务器,那么这是最佳选择。若要将数据放入 SSRS 中的单个表中,需要将来自不同服务器的数据 UNION 或 JOIN 到单个记录集中,这样只需从 SSRS 连接一台服务器。
我已经创建了一个在 Management Studio 中运行时工作正常的存储过程,但是当我从 SSRS 报表生成器调用它时,该存储过程不起作用。
SSRS 在此处没有引入其他限制,执行查询的是数据库本身,因此,如果已将此查询封装在存储过程中,并证明它在通过 SSMS 执行时有效,则唯一的其他变量是安全上下文。因此,请检查 SSRS 连接所使用的用户帐户是否已被授予与测试所用用户帐户相同的权限,或使用 SSRS 帐户登录 SSMS 以验证是否可以执行存储过程。
要考虑的另一件事是,当您在 SMS 中测试此内容时,是否在 SSRS 报表连接到的同一台服务器上进行测试?如果两个环境中的安全上下文相同,则没有理由不这样做,只需确保将苹果与苹果进行比较即可。
回复:存储过程不起作用
不起作用非常模糊,您能否提供错误消息或解释结果?SQL Server 通常提供非常简洁的错误消息,我们可以使用这些错误消息来确定任何故障的具体原因。
替代解决方案
关键是使其中一个数据库能够查询其他数据库,这样我们的 SSRS 数据源就可以对其中一个数据库进行单个查询,并合并查询或 SP 中的数据。那么,我们如何在 SQL Server 中本地执行此操作呢?
链接服务器:sp_addlinkedserver允许您查询其他数据提供程序,如果链接服务器是 SQL Server 的实例,则可以执行远程存储过程。
- Azure SQL DB 不支持此功能
- 根据您的安全配置,您可能需要定义登录名,阅读有关链接服务器安全性的更多信息
外部表SQL Server 2016SQL Server 2016SQL Server 2016SQL Server 2016SQL Server 2016SQL Server 2016SQL Server 2016SQL Server 2016SQL Server 2016 SQL Server 2016 SQL Server 2016 SQL Server 2016 SQL Server 2016 SQL Server 2016 SQL Server 2016 SQL Server 2016 SQL Server 2当然,您可以使用它来连接其他 SQL 数据库。这是一个抽象层,可能不会改善您当前的问题,但如果您仍然坚持下去,可能值得一看;)
- 此解决方案适用于 Azure SQL DB,但在 Azure SQL 托管实例和 MS SQL Server 中也受支持
评论
Server.Database.Schema.Table