将所有 SSRS 报告的共享数据源路径更新为不同的路径
Update Shared Datasource Path of all SSRS reports to different path
我正在处理 SSRS
报告。
最近我将所有 SSRS
报告的文件夹位置更改为不同的路径。我还需要更改数据源路径。 (因为我再次移动了报告,所以我需要设置数据源)所以我不能通过转到 Manage
.
手动取消它
但是是否有任何快捷方式来设置所有 SSRS
报告的数据源路径?
您可以使用 RS.exe 或 ReportSync 实用程序来移动报告和数据源。
您还可以使用 T-SQL 脚本从 ReportServer 数据库更新 Catalog
table。
使用此查询探索您的数据源路径。
SELECT
a.Name,
b.Path
FROM DataSource a
INNER JOIN Catalog b
ON a.ItemID = b.ItemID
更新数据源的 path
以指向报告路径。请注意,如果数据源不是部署到特定文件夹的共享数据源,它将起作用。
UPDATE b
SET b.Path = '<your_path>'
FROM DataSource a
INNER JOIN Catalog b
ON a.ItemID = b.ItemID
WHERE a.Name IN ('Datasource1', 'Datasource2')
I am not sure about this works since I cannot try it in this moment so
I recommend you use the accepted migration tools RS.exe or
ReportSync.
如果这对你有帮助,请告诉我。
最后,我找到了解决方案并度过了愉快的一天。
我已经浪费了 5 个小时的时间来寻找解决方案。
要更新共享的 Datasource
路径 - 需要更新 Report Server
的 Datasource
table。
SELECT cLog.Path,dSource.name
FROM DataSource AS dSource
JOIN CATALOG AS cLog ON cLog.ItemID = dSource.ItemID
WHERE dSource.flags = dSource.flags AND dSource.Link IS NULL AND dSource.ConnectionString IS NULL
AND dSource.NAME = 'NameofDatasource' AND cLog.path LIKE '%foldername%'
ORDER BY
PATH
它将显示所有没有连接字符串的报表。所以现在,您必须更新 [Link]
。
注意: 要获取最新的 [Link]
- 您需要通过手动设置 Datasource
路径和执行以下查询,这将为您提供最新的 [Link]
。
SELECT ds.Link
FROM DataSource AS ds
JOIN CATALOG AS c ON c.ItemID = ds.ItemID
WHERE ds.NAME = 'NameofDatasource' AND c.path LIKE '%foldername%' AND ds.Link IS NOT NULL
现在,只剩下用相同的 where 子句更新它了。因此它将更新所有报告的最新 [Link]
。
UPDATE dSource set [Flags] = [Flags] | 2, [Link] = 'PutLatestLink'
FROM DataSource AS dSource
JOIN CATALOG AS cLog ON cLog.ItemID = dSource.ItemID
WHERE dSource.flags = dSource.flags AND dSource.Link IS NULL AND dSource.ConnectionString IS NULL
AND dSource.NAME = 'NameofDatasource' AND cLog.path LIKE '%foldername%'
注意: 如果直接在实时服务器上执行此查询,请小心。第一次,尝试使用上述查询仅更新一个特定的报告,然后在确实需要并且工作正常的情况下为其他人做。
我正在处理 SSRS
报告。
最近我将所有 SSRS
报告的文件夹位置更改为不同的路径。我还需要更改数据源路径。 (因为我再次移动了报告,所以我需要设置数据源)所以我不能通过转到 Manage
.
但是是否有任何快捷方式来设置所有 SSRS
报告的数据源路径?
您可以使用 RS.exe 或 ReportSync 实用程序来移动报告和数据源。
您还可以使用 T-SQL 脚本从 ReportServer 数据库更新 Catalog
table。
使用此查询探索您的数据源路径。
SELECT
a.Name,
b.Path
FROM DataSource a
INNER JOIN Catalog b
ON a.ItemID = b.ItemID
更新数据源的 path
以指向报告路径。请注意,如果数据源不是部署到特定文件夹的共享数据源,它将起作用。
UPDATE b
SET b.Path = '<your_path>'
FROM DataSource a
INNER JOIN Catalog b
ON a.ItemID = b.ItemID
WHERE a.Name IN ('Datasource1', 'Datasource2')
I am not sure about this works since I cannot try it in this moment so I recommend you use the accepted migration tools RS.exe or ReportSync.
如果这对你有帮助,请告诉我。
最后,我找到了解决方案并度过了愉快的一天。
我已经浪费了 5 个小时的时间来寻找解决方案。
要更新共享的 Datasource
路径 - 需要更新 Report Server
的 Datasource
table。
SELECT cLog.Path,dSource.name
FROM DataSource AS dSource
JOIN CATALOG AS cLog ON cLog.ItemID = dSource.ItemID
WHERE dSource.flags = dSource.flags AND dSource.Link IS NULL AND dSource.ConnectionString IS NULL
AND dSource.NAME = 'NameofDatasource' AND cLog.path LIKE '%foldername%'
ORDER BY
PATH
它将显示所有没有连接字符串的报表。所以现在,您必须更新 [Link]
。
注意: 要获取最新的 [Link]
- 您需要通过手动设置 Datasource
路径和执行以下查询,这将为您提供最新的 [Link]
。
SELECT ds.Link
FROM DataSource AS ds
JOIN CATALOG AS c ON c.ItemID = ds.ItemID
WHERE ds.NAME = 'NameofDatasource' AND c.path LIKE '%foldername%' AND ds.Link IS NOT NULL
现在,只剩下用相同的 where 子句更新它了。因此它将更新所有报告的最新 [Link]
。
UPDATE dSource set [Flags] = [Flags] | 2, [Link] = 'PutLatestLink'
FROM DataSource AS dSource
JOIN CATALOG AS cLog ON cLog.ItemID = dSource.ItemID
WHERE dSource.flags = dSource.flags AND dSource.Link IS NULL AND dSource.ConnectionString IS NULL
AND dSource.NAME = 'NameofDatasource' AND cLog.path LIKE '%foldername%'
注意: 如果直接在实时服务器上执行此查询,请小心。第一次,尝试使用上述查询仅更新一个特定的报告,然后在确实需要并且工作正常的情况下为其他人做。