我正在运行一个 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