2015-02-06 14 views
5

Per il seguente codice diInvoke-SqlCmd non restituisce una stringa lunga?

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

La tornato $r ha una stringa XML troncata. Come assicurarsi che venga restituita la stringa lunga completa?

risposta

11

Questo cmdlet ha una lunghezza massima di caratteri predefinita, il valore predefinito è 4.000 caratteri [1] per i tipi di dati XML o di tipo char.

provare quanto segue:

$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 - Cerca -MaxCharLength

+0

In realtà ho trovato il risultato è suddiviso in più righe. – ca9163d9

+0

@ dc7a9163d9 Ho scoperto che questo è vero anche per alcune prove veloci che ho fatto. Tuttavia, dovrebbe essere abbastanza semplice ricostruire il tuo documento xml. Metti di nuovo l'humpty dumpty insieme. ;) Detto questo, ho anche scoperto che se trovi che la tua query restituisce più di 4000 elementi di array per una singola colonna di dati char (1024 per binario, usa '-MaxBinaryLength'), allora avrai bisogno del comando sopra per fare sicuro di avere l'intero documento. –

+0

Ammetto che i miei test fossero solo con dati binari che avevo già in un DB da qualche parte. Non ho fatto alcun test su xml o altri dati char. Non so come powershell li avrebbe fatti a pezzi. Per me sembrava che li riducesse a byte. Forse per un documento XML lo fa per riga. Dovrebbe provarlo. –

Problemi correlati