Powershell Invoke-Sqlcmd输出包含点' ...'和随机标题

时间:2017-08-11 17:50:20

标签: sql-server json powershell formatting

我正在运行一个powershell脚本来获取SQL查询的结果(来自SQL2016的JSON格式),然后将结果分解为各个行,其中包含' ...'最后,而不是一个JSON字符串和文件顶部的一些标题信息。这使得JSON无法使用。

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

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

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

powershell脚本:

Invoke-Sqlcmd -InputFile "C:\Dashboard\sql\gtldata.sql" | Out-File -filepath "C:\Dashboard\json\gtldata.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"...

2 个答案:

答案 0 :(得分:0)

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

  

-w column_width

     

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

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

答案 1 :(得分:0)

尝试以下方法,因为它对我有用。结果是varbinary列到字符串

的非截断输出

原始帖子[此处] [1]

bcp "SELECT CAST(BINARYCOL AS VARCHAR(MAX)) FROM OLTP_TABLE WHERE ID=123123 AND COMPANYID=123" queryout "C:\Users\USER\Documents\ps_scripts\res.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