我正在创建一个SSRS报告,它将从两个不同的数据库中获取数据。问题是,开发和实时服务器中的数据库名称会有所不同。
我的问题是 - 1)我应该在Stored Proc级别做什么,以便在数据库名称发生变化时我不需要更改任何内容? 2)我应该在报告级别(或数据集)上做什么,以便我不需要为不同的数据库名称更改任何内容?
我在SQL Server 2008 R2上部署了SSRS。
答案 0 :(得分:5)
您无需对存储过程执行任何操作。只需确保它在正确的Databse上。您可以在报告中使用参数处理各种数据库名称:
="Data Source=YourServerName;Initial Catalog=" & Parameters!DBName.Value
答案 1 :(得分:1)
你被迫做动态sql。
您是否有办法检索数据库的名称并知道它是如何更改的?
您可以想象将名称作为参数传递。 并且为了防止sql注入到easyli,你可以检查变量是否存在于sys.databases和另一个数据集中,如果第一个为真,你可以将值传递给你的存储过程并执行它。
对于存储过程,创建一个变量nvarchar(max),在该变量中添加所有代码,将引号加倍并提取数据库名称,使其像这样。
declare @sql = 'select * from [' + @mydb + '].dbo.mytable'
答案 2 :(得分:1)
通常,在创建报表时,我会创建指向不同数据库的共享数据源。您可以将它们视为基本上是连接字符串。 SSRS的优点在于,您可以拥有一个上传到服务器的数据源,并可以在不同的报告中使用。然后,如果您需要更改数据库的位置,则只需对SSRS服务器上的共享数据源执行一次,并且所有报告都将指向新位置。此外,这可以将服务器与报告分开。因此,在您的实例中,您可以将相同的报告上载到多个服务器,并根据您在该服务器上的数据源将报告连接到不同的服务器。
答案 3 :(得分:1)
同一报告中有多个数据集,并且可能。
第1步 使用不同的服务器/数据库/表名称创建尽可能多的数据源 例如: 数据源1 =服务器1 /数据库1 /表1 DataSource2 = server2 / Database2 / table2
第2步 使用
创建尽可能多的数据集第3步 在同一“报告”窗口中->右键单击并选择“插入”-“表”
将桌子放在您想要的任何地方 转到表的属性-将所需的DataSetName设置为Datasource。 DatasetName = Datasource2
确保数据集可以正常使用,并在报表数据的左侧显示字段
保存并运行报告。
玩得开心...!