在Reporting Services 2005中,我需要更新300多个报告中的嵌入图像文件以使用新图像(重新标记)。 我能够提出一个脚本,将RDL更改为我想要的,但是当我在Report Manager中运行报表时,它会继续使用旧的报表定义并显示旧图像。如果我将RDL下载到文本文件,它会有我的更改。当我重新上传时,报告会显示新图像。
我想知道是否需要做其他事情告诉Reporting Services有新的定义。
我的t-sql语句如下:
-- Pull updated image code from a sample report I updated with new logo
DECLARE @NewImageString VARCHAR(MAX)
SELECT @NewImageString = SUBSTRING(convert(VARCHAR(max), convert(VARBINARY(max), content)), charindex('<EmbeddedImage Name="logo_1">', convert(VARCHAR(max), convert(VARBINARY(max), content)))
--calculate length of new image string
, 15 + charindex('9k=</ImageData>', convert(VARCHAR(max), convert(VARBINARY(max), content))) --endpoint of new image string
- charindex('<EmbeddedImage Name="logo_1">', convert(VARCHAR(max), convert(VARBINARY(max), content))) -- beginning point of new image string
)
FROM reportserver.dbo.CATALOG
WHERE content IS NOT NULL
AND PATH LIKE '%/Live.Reports%'
AND NAME LIKE 'rpt_Triage_new%'
-- Replace <EmbeddedImage> portion of RDL
UPDATE ReportServer.dbo.CATALOG
SET CONTENT = convert(IMAGE, convert(VARBINARY(max), SUBSTRING(convert(VARCHAR(max), convert(VARBINARY(max), content)), 0, charindex('<EmbeddedImage Name="logo">', convert(VARCHAR(max), convert(VARBINARY(max), content)))) + @NewImageString + SUBSTRING(convert(VARCHAR(max), convert(VARBINARY(max), content)), 28 + charindex('53KOZjtohn0ICAA7</ImageData>', convert(VARCHAR(max), convert(VARBINARY(max), content))), 200000)))
WHERE PATH LIKE '%/Test1.Reports%'
AND NAME LIKE 'rptTriage_to_update%'
-- Update <Value> for Image1 reference
UPDATE ReportServer.dbo.CATALOG
SET content = convert(IMAGE, convert(VARBINARY(max), REPLACE(convert(VARCHAR(max), convert(VARBINARY(max), content)), '<Value>logo</Value>', '<Value>logo_1</Value>')))
WHERE content IS NOT NULL
AND PATH LIKE '%/Test1.Reports%'
AND NAME LIKE 'rptTriage_to_update%'
AND convert(VARCHAR(max), convert(VARBINARY(max), content)) LIKE '%<Value>logo</Value>%'
答案 0 :(得分:0)
如果您的报告未在多个文件夹中进行整理,并且您可以以http://server/reports的形式访问报告,则删除该文件夹中的所有现有报告并上传所有新的rdl文件。这将使上传rdl文件变得容易。
答案 1 :(得分:0)
我的最终解决方案涉及使用上述脚本更改报告定义,然后使用RSScripter批量下载和上传报告。我以前没有意识到,但RSScripter会自动生成一个命令文件来重新上传报告。