首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >tSQLt.XmlResultFormatter在2033年之后截断结果

tSQLt.XmlResultFormatter在2033年之后截断结果
EN

Stack Overflow用户
提问于 2020-01-17 10:07:30
回答 1查看 426关注 0票数 1

尝试使用tSQLt将我的tSQLt.XmlResultFormatter测试结果导出到tSQLt.XmlResultFormatter。但它似乎在2033个字符之后截断了输出,

代码语言:javascript
复制
BEGIN TRY EXEC tSQLt.RunAll END TRY BEGIN CATCH END CATCH; EXEC tSQLt.XmlResultFormatter

我想要xml的输出,这样我就可以在Microsoft部署管道中引用它。我现在只有14次测试,感觉不像很多。如果这是XmlResultFormatter的限制,是否有其他方法以xml格式获得结果?

耽误您时间,实在对不起

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-21 09:34:08

您不需要说明使用什么方法来执行问题中的SQL命令。可能有一种更简化的方法,但我在Jenkins中解决了这个问题,然后在Windows代理上用下面的代码将解决方案移植到Azure DevOps命令行任务中。EXEC tSQLt.RunAll在前面的一步中运行:

代码语言:javascript
复制
::export the test results to a file
bcp "EXEC [tSQLt].[XmlResultFormatter];" queryout %WORKSPACE%\test_results.xml -S %DBSERVER% -d %DBNAME% -T -w

::remove the carriage returns (added by BCP every 2048 chars) from the xml file
::and write to a new file
PowerShell -ExecutionPolicy Bypass -NoProfile -Command "& {(gc %WORKSPACE%\test_results.xml -Raw).replace([Environment]::NewLine , '') | Set-Content %WORKSPACE%\output_test_results.xml}"

希望这些评论能解释到底发生了什么。

命令行任务定义了以下环境变量:

  • DBSERVER --数据库服务器name
  • DBNAME -- test
  • WORKSPACE - $(build.sourcesDirectory)下的数据库名称--这是在Jenkins中运行脚本的遗留文件,可以将

考虑在内。

第二个命令output_test_results.xml输出的文件将传递给构建中稍后的发布测试结果任务。

编辑

我调查过这件事我想我知道发生了什么。尽管SSMS将XML结果表示为单个列/行,但数据实际上作为较短的行序列(<2048个字符)返回给客户端。

Invoke-Sqlcmd的默认行为是以DataRow对象数组的形式返回结果--数组中的每个项都包含2000到2048个字符。需要将这个数组连接在一起以生成结果集--以下是在PowerShell中这样做的一种方法:

代码语言:javascript
复制
$out = ""; Invoke-SqlCmd  -ServerInstance <server> -Database <db name> -Query "exec tSQLt.XmlResultFormatter" -MaxCharLength 1000000 | %{ $out = $out + $_[0]}; $out > c:\temp\output.txt

我最初的答案也受到这个问题的影响,因此删除回车的PowerShell命令每隔2048个字符返回一次。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59785173

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档