Invoke-SqlCmd不返回长字符串?

时间:2015-02-06 21:06:21

标签: 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字符串。如何确保返回完整的长字符串?

2 个答案:

答案 0 :(得分:15)

该cmdlet具有默认的最大字符长度,对于XML或char数据类型,默认为4,000个字符 [1]

尝试以下方法:

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

[1] http://blogs.technet.com/b/heyscriptingguy/archive/2013/05/06/10-tips-for-the-sql-server-powershell-scripter.aspx - 搜索-MaxCharLength

答案 1 :(得分:0)

很多时候可以解决这种情况:

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

但是,在某些情况下它不起作用:

  • 该解决方案似乎在80,000到3,500,000字符之间的某个地方崩溃了。
  • 我得到的结果是混乱的:内部XML破坏了外部XML,因此显然至少我们的版本也存在一些缺陷。

您可以尝试几种解决方案:

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