sql-server - 使用 Powershell 从存储过程返回的数据(大型 XML 文件)从 ReportServer 输出 XML 时如何停止截断数据

标签 sql-server xml file powershell powershell-cmdlet

我一直在思考一个相当简单的想法,即从底层数据库导出 ReportServer 报告,然后找到其依赖的存储过程并导出它们。

但是,在最初测试时,我发现报告本身的 XML 数据以我将内容导出到文件的标准方式被截断,我认为我可能使用了不正确的方法。

此时代码相当简单,我正在使用一个名为“ChartReport”的简化报告:

Import-Module 'sqlps'
$saveloc = "$home\savedata\filename.txt"

$dataquery = @"
        DECLARE @name NVARCHAR(MAX)='ChartReport',
                @path NVARCHAR(MAX) = '/ChartReport'
    SELECT CAST(CAST(c.Content AS VARBINARY(MAX)) AS XML) [ReportData], c.Name, c.Path
    FROM ReportServer.dbo.Catalog c
    WHERE   c.Name = @name
    AND c.Path  LIKE @path+'%'
"@

Invoke-SQLCMD -Query $dataquery | select ReportData | Out-File $saveloc

我已经验证查询返回 XML(底层 XML 文件本身超过 25000 个字符,如果有人感兴趣,我很乐意提供指向它的链接),但是当我保存文件时,我得到类似以下内容:

第 1 列


<报告 xmlns:rd="http://schemas.microsoft.com/SQLServer/reporting/reportdesigner"xmlns:cl="http://schemas.microsof...

我尝试使用一些已经发布在 SO 上的想法,例如:

> $somefile Powershell 2: Easy way to direct every bit of output to a file?

输出文件并指定宽度 Powershell Add-Content Truncating Output

将格式表与 -autosize 和 -wrap 结合使用

其中每一个都会在某个时刻失败(尽管 format-table 方法在截断之前已经走了很远)。

我肯定会考虑某种特定于 XML 的解决方案,但实际上我认为这只是我丢失了一些信息。据我考虑,这是一个“东西”文件,我想在将所述文件加载到对象中后将其写入磁盘。

迭代某种换行符并将对象的每一行写入文件是惯用的答案吗?

最佳答案

使用 Invoke-SQLCMD 命令的 -MaxCharLength 参数。默认为 4000。

参见Invoke-SqlCmd doesn't return long string?

关于sql-server - 使用 Powershell 从存储过程返回的数据(大型 XML 文件)从 ReportServer 输出 XML 时如何停止截断数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20673814/

相关文章:

xml - 使用 XML 模式将 XML 转换为 JSON

xml - XQuery 中基于变量的动态排序(排序依据)

javascript - 如何将 <html contenteditable> 内容保存为文本文件

php - 是否可以使用包含所有要上传文件的路径的文本文件上传多个文件?

mysql - 如何使用 sql 和按日期分组显示指标随日期的累积增长?

sql - 我可以优化这个 SQL 远程更新吗?

sql - 如何序列化具有相同参数的存储过程的多次执行?

sql-server - SQL Server 备份集 "Description"

xml - Visual Studio XSD 工具 : Generate Collections Rather Than Arrays

指针数组中的 C++ 错误