Powershell invoke-sqlcmd 输出包含点 '...'和随机标头



我正在运行一个 powershell 脚本来获取 SQL 查询的结果(来自 SQL2016 的 JSON 格式(,结果返回后分解为单独的行,并带有"..."而不是一个 JSON 字符串和文件顶部的一些标头信息。 这使得 JSON 不可用。

我通过在 SSMS 中运行相同的查询来验证这是在 PowerShell 端,结果按预期出来(有效的 JSON(

我找不到任何用于控制 Invoke-SqlCommand 输出的命令行参数

我是PowerShell的新手...任何想法如何帮助我从这个PowerShell脚本中获取干净的JSON?

Powershell 脚本:

Invoke-Sqlcmd -InputFile "C:Dashboardsqlgtldata.sql" | Out-File -filepath "C:Dashboardjsongtldata.json"

返回的文档示例:

JSON_F52E2B61-18A1-11d1-B105-00805F49916B                                                                                                  
-----------------------------------------                                                                                                  
{"KPI":[{"BusinessUnit":"Water - Industrial","Location":"SPFIN","TestDate":"2016-09-19T21:11:10.837","TestResult":"Fail","FailReason":"P...
ial":"100161431","PumpType":"xxx","Stages":0},{"BusinessUnit":"Water - Industrial","Location":"SPFIN","TestDate":"2016-09-20T01:48...
"PumpType":"xxx","Stages":0},{"BusinessUnit":"Pre-engineered","Location":"SPSPA","TestDate":"2016-09-20T10:46:38.403","TestResult"...

您需要将-MaxCharLength选项添加到调用中。 默认情况下,sqlcmd(因此Invoke-Sqlcmd(使用 80 个字符的输出宽度,如以下sqlcmd文档所述:

-w column_width

指定输出的屏幕宽度。此选项设置 sqlcmd 脚本变量 SQLCMDCOLWIDTH。列宽必须是大于 8 且小于 65536 的数字。如果指定的列宽不在该范围内,sqlcmd 将生成 和 错误消息。默认宽度为 80 个字符。当输出行超过指定的列宽时,它将换行到下一行。

我会尝试为您的输出设置-MaxCharLength 65535,因为未格式化的 JSON 中不会有任何换行符。

尝试以下操作,因为它对我有用。结果是将变量二进制列的非截断输出到字符串

原始帖子[这里][1]

bcp "SELECT CAST(BINARYCOL AS VARCHAR(MAX)) FROM OLTP_TABLE WHERE ID=123123 AND COMPANYID=123" queryout "C:UsersUSERDocumentsps_scriptsres.txt" -c -S myserver.db.com  -U admin -P password

[1]: https://stackoverflow.com/questions/60525910/powershell-truncating-sql-query-output?noredirect=1#comment107077512_60525910

最新更新