我正在运行一个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"...
答案 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