从SSRS Server自动导出RDL格式的所有报告

时间:2016-03-17 15:44:21

标签: reporting-services ssrs-2008 ssrs-2008-r2

SSRS使您能够将报告导出为原始RDL格式:http://sql-articles.com/articles/general/download-export-rdl-files-from-report-server/

我想知道的是,是否有办法将所有报告(通过我可以编写的命令行界面)或某些工具导出为原始RDL格式,然后可以压缩等等。

感谢您的时间。

2 个答案:

答案 0 :(得分:1)

我没有对此进行测试,但它似乎可以满足您的需求。

https://gallery.technet.microsoft.com/scriptcenter/SSRS-all-RDL-files-from-00488104

答案 1 :(得分:0)

我已经创建了一个powershell脚本来执行此操作。您必须连接到具有SSRS数据库的SQL Server。它将所有文件压缩成一个zip文件。

Add-Type -AssemblyName "System.IO.Compression.Filesystem"

$dataSource = "SQLSERVER"
$user = "sa"
$pass = "sqlpassword"
$database = "ReportServer"
$connectionString = "Server=$dataSource;uid=$user; pwd=$pass;Database=$database;Integrated Security=False;"

$tempfolder = "$env:TEMP\Reports"
$zipfile = $PSScriptRoot + '\reports.zip'

$connection = New-Object System.Data.SqlClient.SqlConnection
$connection.ConnectionString = $connectionString

$connection.Open()

$allreports = $connection.CreateCommand()
$allreports.CommandText = "SELECT ItemID, Path, CASE WHEN Type = 2 THEN '.rdl' ELSE 'rds' END AS Ext FROM Catalog WHERE Type IN(2,5)"

$result = $allreports.ExecuteReader()

$reportable = new-object "System.Data.DataTable"
$reportable.Load($result)
[int]$objects = $reportable.Rows.Count
foreach ($report in $reportable) {
    $cmd = $connection.CreateCommand()
    $cmd.CommandText = "SELECT CAST(CAST(Content AS VARBINARY(MAX)) AS XML) FROM Catalog WHERE ItemID = '" + $report[0] + "'"
    $xmldata = [string]$cmd.ExecuteScalar()
    $filename = $tempfolder + $report["Path"].Replace('/', '\') + $report["Ext"]
    New-Item $filename -Force | Out-Null
    Set-Content -Path ($filename) -Value $xmldata -Force
    Write-Host "$($objects.ToString()).$($report["Path"])"
    $objects -= 1
}

Write-Host "Compressing to zip file..."
if (Test-Path $zipfile) {
    Remove-Item $zipfile
}
[IO.Compression.Zipfile]::CreateFromDirectory($tempfolder, $zipfile) 

Write-Host "Removing temporarly data"
Remove-Item -LiteralPath $tempfolder -Force -Recurse

Invoke-Item $zipfile