我们已从 SSRS 2012 迁移到 SSRS 2016,并将其移至新域。
使用下面的代码,我们能够列出所有数据源及其连接字符串。我们如何使用 PowerShell 或 T-SQL 更改近 700 个报告的连接字符串?(以便指向新的数据仓库服务器)
WITH XMLNAMESPACES -- XML namespace def must be the first in with clause.
(DEFAULT 'http://schemas.microsoft.com/sqlserver/reporting/2006/03/reportdatasource'
,'http://schemas.microsoft.com/SQLServer/reporting/reportdesigner'
AS rd)
,SDS AS
(SELECT SDS.name AS SharedDsName
,SDS.[Path]
,CONVERT(xml, CONVERT(varbinary(max), content)) AS DEF
FROM dbo.[Catalog] AS SDS
WHERE SDS.Type = 5) -- 5 = Shared Datasource
SELECT CON.[Path]
,CON.SharedDsName
,CON.ConnString
FROM
(SELECT SDS.[Path]
,SDS.SharedDsName
,DSN.value('ConnectString[1]', 'varchar(150)') AS ConnString
FROM SDS
CROSS APPLY
SDS.DEF.nodes('/DataSourceDefinition') AS R(DSN)
) AS CON
-- Optional filter:
-- WHERE CON.ConnString LIKE '%Initial Catalog%=%TFS%'
ORDER BY CON.[Path]
,CON.SharedDsName;
Run Code Online (Sandbox Code Playgroud)
您可以使用replace value ofXML DML 命令来修改连接字符串中存储的值。我在下面整理了一个示例作为指导,但请注意,它未经测试,因为我目前无法访问报表服务器,它至少应该为您指明正确的方向:
WITH XMLNAMESPACES -- XML namespace def must be the first in with clause.
(DEFAULT 'http://schemas.microsoft.com/sqlserver/reporting/2006/03/reportdatasource'
,'http://schemas.microsoft.com/SQLServer/reporting/reportdesigner'
AS rd)
,SDS AS
(SELECT SDS.name AS SharedDsName
,SDS.[Path]
,CONVERT(xml, CONVERT(varbinary(max), content)) AS DEF
FROM dbo.[Catalog] AS SDS
WHERE SDS.Type = 5) -- 5 = Shared Datasource
SELECT [SharedDsName], [Path], [DEF]
INTO #catalog
FROM SDS;
UPDATE #catalog
SET DEF.modify ('
declare namespace rds="http://schemas.microsoft.com/sqlserver/reporting/2006/03/reportdatasource";
declare namespace rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner";
replace value of (/rds:DataSourceDefinition/rds:ConnectString/text())[1]
with "new connection string"
');
UPDATE a
SET a.[Content] = CONVERT(image, CONVERT(varbinary(max), b.[DEF]))
FROM dbo.Catalog AS a
JOIN #catalog AS b
ON a.[Name] = b.[SharedDsName]
AND a.[Path] = b.[Path];
DROP TABLE #catalog;
Run Code Online (Sandbox Code Playgroud)
有关该命令的更多信息可以在Microsoft Docsreplace value of中找到。
| 归档时间: |
|
| 查看次数: |
5287 次 |
| 最近记录: |