【发布时间】:2019-08-22 19:29:59
【问题描述】:
我有一个表,其中有一列包含 JSON 数据。它可以相当大。我想使用 PowerShell 运行查询以从单行中选择 JSON 数据。该命令如下所示:
Invoke-Sqlcmd -ServerInstance xxxxxx
-Database xxxxxx -Username xxxxxx -Password xxxxxx
-Query 'select [data] from jsontable where versionid=1922'
-MaxCharLength 700000 | Out-File .\my.json
命令有效,但结果只是整体的一小部分。例如在我看到的输出文件中:
data
----
{"$type":"System.Collections.Generic.List`1[[TBSM.Vision.FpFtp.Common.Domain.Data.FeedDerivedAttributeRuleData, TBSM.Vision.FpFtp.Common.Domain.Data]], mscorlib","$values":[{"$type":"TBSM.Vision.FpFtp.Common.Domain.Data.Fee...
但数据实际上开始了:
{"$type":"System.Collections.Generic.List`1[[TBSM.Vision.FpFtp.Common.Domain.Data.FeedDerivedAttributeRuleData, TBSM.Vision.FpFtp.Common.Domain.Data]], mscorlib","$values":[{"$type":"TBSM.Vision.FpFtp.Common.Domain.Data.FeedDerivedAttributeRuleData, TBSM.Vision.FpFtp.Common.Domain.Data","FeedCode":"All","id":"a513ede8-d520-77b1-65f8-6377a24fdd83","mappingRules":{"$type":"System.Collections.Generic.List`1[[TBSM.Vision.FpFtp.Common.Domain.Data.DerivedAttributeRuleDataCollection, TBSM.Vision.FpFtp.Common.Domain.Data]], mscorlib","$values":[{"$type":"TBSM.Vision.FpFtp.Common.Domain.Data.DerivedAttributeRuleDataCollection, TBSM.Vision.FpFtp.Common.Domain.Data","Rule Sequence":27,"classification":"Default","id":"3ad4c21c-7e69-e1ce-473f-d477767054ec","mappingRules":{"$type":"System.Collections.Generic.List`1[[TBSM.Vision.FpFtp.Common.Domain.Data.RuleData, TBSM.Vision.FpFtp.Common.Domain.Data]], mscorlib","$values":[
然后从那里继续。
如您所见,我指定了 MaxCharLength。如何停止截断并获取所有 JSON 数据
【问题讨论】:
-
在脚本末尾试试这个-> Select-Object date |格式列表
-
这让我得到了更多,但仍然不是全部。
-
我认为您正在将 DataRow 或 DataTable 输送到 Out-File 中,并且它会将 that 序列化到您的文件中。尝试类似“$result = Invoke-SqlCmd ...; $result.Rows[0][“数据”].Value | out-file .\my.json”,它应该只写你的数据。明天我到电脑前去看看。
-
正如@mclayton 所说,在将命令作为变量获取后尝试 [Format-List -InputObject $result]
-
试试
-MaxCharLength 700000 | Select -Expand Data | Out-File .\my.json
标签: powershell sql-server-2016 invoke-sqlcmd