Sql server 调用SqlCmd不';不返回长字符串?

Sql server 调用SqlCmd不';不返回长字符串?,sql-server,powershell,Sql Server,Powershell,对于以下代码 $sql = "select ..... for xml path('row')" # returns a long xml file $x = Invoke-SqlCmd -Server xxxx $sql $r = $x[0].ItemArray[0] 返回的$r具有截断的xml字符串。如何确保返回完整的长字符串?该cmdlet具有默认的最大字符长度,对于XML或char数据类型,默认为4000个字符(请参阅) 请尝试以下操作: $x = Invoke-SqlCmd -Ser

对于以下代码

$sql = "select ..... for xml path('row')" # returns a long xml file
$x = Invoke-SqlCmd -Server xxxx $sql
$r = $x[0].ItemArray[0]

返回的
$r
具有截断的xml字符串。如何确保返回完整的长字符串?

该cmdlet具有默认的最大字符长度,对于XML或char数据类型,默认为4000个字符(请参阅)

请尝试以下操作:

$x = Invoke-SqlCmd -Server xxxx $sql -MaxCharLength <some large enough number>
$x=Invoke SqlCmd-Server xxxx$sql-MaxCharLength

这多次解决了这个问题:

$x = Invoke-SqlCmd -Server xxxx $sql -MaxCharLength <some large enough number>
$x=Invoke SqlCmd-Server xxxx$sql-MaxCharLength
但是,在某些情况下,它不起作用:

  • 在80000到3500000个字符之间,此解决方案似乎出现故障
  • 我得到的结果是混乱的:内部XML破坏了外部XML,所以很明显,至少我们的版本也有一些缺陷
您可以尝试以下几种解决方案:

  • 将内容限制为x个字符,例如80000个字符,并且不要尝试导出长度超过该字符的内容。我没有测试这是否也能解决缺陷问题,所以如果其他人有这个问题,请评论这是否有帮助
  • 我将所有内容导出为CSV,破坏了内部XML,创建了临时XML结果,最后再次修复了内部XML。这个解决方案奏效了。在处理几乎1 GB大小的文件以提高性能时,必须使用带有文件读取的选项“-raw”

事实上,我发现结果被分成多行。@dc7a9163d9我通过一些快速测试也发现了这一点。但是,重建xml文档应该很容易。只要再把汉普·达普放在一起就行了也就是说,我还发现,如果您发现查询返回的单个字符数据列超过4000个数组元素(1024个用于二进制;使用
-MaxBinaryLength
),然后你需要上面的命令来确保你得到了整个文档。我没有对xml或其他字符数据进行任何测试。我不知道powershell会怎么把它们塞住。对我来说,这就像是把它们按字节切碎一样。也许对于xml文档,它是按行执行的。这个答案解决了我的问题,数据没有被分割成多行。我成功地读取了超过80000字节的字符串。谢谢。事实上,这一点是必要的,这说明powershell是多么的破碎,因此解决方案需要涉及到这一点,而不是提供类似于-NoTruncate的东西