如何使用我在ReportServer数据库中更新的RDL代码生成报告

时间:2015-02-06 19:22:06

标签: reportingservices-2005

在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>%'

2 个答案:

答案 0 :(得分:0)

如果您的报告未在多个文件夹中进行整理,并且您可以以http://server/reports的形式访问报告,则删除该文件夹中的所有现有报告并上传所有新的rdl文件。这将使上传rdl文件变得容易。

答案 1 :(得分:0)

我的最终解决方案涉及使用上述脚本更改报告定义,然后使用RSScripter批量下载和上传报告。我以前没有意识到,但RSScripter会自动生成一个命令文件来重新上传报告。