2015-02-06 10 views
5

für den folgenden CodeInvoke-SqlCmd gibt keine lange Zeichenfolge zurück?

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

Der zurück $r ein verkürztes XML-Zeichenfolge aufweist. Wie kann sichergestellt werden, dass die vollständige lange Zeichenfolge zurückgegeben wird?

Antwort

11

Dieses Cmdlet verfügt über eine Standardzeichenlänge von max. 4.000 Zeichen [1] für XML- oder Char-Datentypen.

Versuchen Sie Folgendes:

$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 - Suche nach -MaxCharLength

+0

Eigentlich fand ich das Ergebnis wird in mehrere Zeilen gebrochen. – ca9163d9

+0

@ dc7a9163d9 Das fand ich auch von einigen Tests, die ich gemacht habe. Es sollte jedoch einfach genug sein, Ihr XML-Dokument neu zu erstellen. Setzen Sie einfach Humpty Dumpty wieder zusammen. ;) Das heißt, ich habe auch festgestellt, dass, wenn Sie feststellen, dass Ihre Abfrage mehr als 4000 Array-Elemente für eine einzelne Spalte von char-Daten (1024 für binary zurückgibt; verwenden Sie "-MaxBinaryLength"), dann benötigen Sie den obigen Befehl zu machen Sicher bekommst du das ganze Dokument. –

+0

Zugegeben, obwohl meine Tests nur mit Binärdaten waren, hatte ich irgendwo in einer Datenbank. Ich habe keine Tests für XML oder andere Char Daten durchgeführt. Ich weiß nicht, wie Powershell sie zerschlagen würde. Für mich sah es so aus, als würde es sie nach Bytes zerhacken. Vielleicht für einen xml doc tut es das pro Zeile. Ich müsste es testen. –

Verwandte Themen