【发布时间】:2013-10-29 16:46:38
【问题描述】:
我有一个 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
每个报表服务器数据源都同名并在报表中引用。
数据集中有没有办法加入这两个数据库?或者有没有人有自己的方式来处理这个问题?这将使这个过程更有效率。
谢谢
【问题讨论】:
-
当我想编辑报告时,我必须在单独的服务器上进行? 为什么?您不能在生产服务器上编辑报告吗?另外,如果您的开发服务器和生产服务器使用相同的数据库名称,这不是更有用吗?当然,这引起的问题不仅仅是开发报告吗?最后,
Ctrl+H在您的查询中查找和替换MainDB1和DevDB1和MainDB2和DevDB2真的那么费力吗? -
处理此问题的最简洁方法是在您的环境之间使用一致的数据库、模式和对象名称。其他任何事情都会导致各种问题,并且几乎没有任何好处……那为什么要这样做呢?如果这不是您的决定,一个潜在的解决方法是为
DB2inDB1... 中的每个引用对象创建一个SYNONYM,然后重新编写查询以使用同义词,以便不需要跨数据库引用...然后您的查询可以只使用两部分名称,并让每个环境的连接确定它是Dev还是Main。 -
肯定可以有一致的数据库、模式和对象名称,但链接服务器采用的服务器名称在生产、测试和开发环境之间很少(我希望)相同。
SYNONYM方法是我发现的最好的方法,因为它允许我们测试部署和迁移脚本并在环境之间移动它们而无需编辑它们。只需制作单独的脚本来为每个环境创建同义词。 -
@JC。链接服务器不一定需要采用服务器名称...使用
sp_addlinkedserver,@datasrc参数是服务器名称,但@server参数可以随心所欲地调用...这就是您的方式在代码中引用链接服务器。使用这些参数,您的链接服务器可以在环境之间具有一致的名称,但指向每个位置的完全不同的服务器。
标签: sql reporting-services datasource