2015-02-06 24 views
5

對於下面的代碼Invoke-SqlCmd不返回長字符串?

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

返回$r有一截XML字符串。如何確保返回完整的長字符串?

回答

11

該cmdlet具有默認的最大字符長度,默認爲4,000個字符[1]用於XML或char數據類型。

嘗試以下操作:

$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

+0

其實我發現,結果被分成多行。 – ca9163d9 2015-02-06 21:35:54

+0

@ dc7a9163d9我發現這一點從我做過的一些快速測試中來看也是如此。但是,重建你的xml文檔應該很簡單。只需再次將矮胖混合在一起。 ;)也就是說,我發現如果你發現你的查詢返回的單個char數據列的數據元素數超過4000個(二進制爲1024;使用'-MaxBinaryLength'),那麼你將需要上面的命令確保你得到整個文件。 – 2015-02-07 00:54:38

+0

儘管我的測試只是用二進制數據,我已經在某個數據庫中。我沒有對xml或其他char數據做任何測試。我不知道PowerShell如何將它們組裝起來。對我來說,它看起來像是按字節切碎它們。也許對於一個XML文檔,它每行都有。將不得不測試它。 – 2015-02-07 01:02:43