2012-07-17 20 views
5

Ho una colonna di SQL Server di tipo XML contenente alcuni record con più di 8000 caratteri.Come si converte un campo XML con più di 8000 caratteri in una stringa?

Vorrei convertire questa colonna in varchar.

Non sono interessato al troncamento (i primi 8000 caratteri vanno bene).

Tuttavia, ogni volta che provo CONVERT(varchar(8000), Content) ottengo un errore:

Target string size is too small to represent the XML instance

Quando provo CONVERT(varchar(MAX), Content) ottengo un errore:

String or binary data would be truncated

Quando provo CONVERT(varchar(20000), Content) ottengo un errore:

The size (20000) given to the type 'varchar' exceeds the maximum allowed for any data type (8000)

Quando provo CONVERT(text, Content) Viene visualizzato un messaggio di errore:

Explicit conversion from data type xml to text is not allowed

C'è una soluzione?

+2

L'esecuzione di 'varchar (max)' dovrebbe funzionare correttamente. [Come questo fa.] (Http://data.stackexchange.com/stackoverflow/query/75495). –

+0

Forse è la configurazione quindi ... Sicuramente ho un errore. –

+0

@ MikaelEriksson - Posta come risposta e la accetterò. Ho fatto un idiota (il particolare contesto in cui stavo usando convert in ha causato un problema che ha fatto il punto). –

risposta

8

Fusioni di varchar(max) dovrebbe funzionare bene. Probabilmente hai un problema altrove. Si otterrebbe quell'errore se si tenta di inserire/aggiornare una colonna con tipo di dati varchar(8000).

+1

Il problema è stato trasmetterlo a una funzione 'hashbytes' che ha un limite 8000 massimo :-) –

+0

Riprese il caso d'uso particolare che stavo avendo qui: http://mattmitchell.com.au/detecting-duplicate-xml-data -in-sql server / –

1

non ho mai avuto questa particolare esigenza, ma un altro modo vorrei provare sarebbe

SUBSTRING(CAST(Content AS VARCHAR), 1, 8000) 
+0

Questo troncherà la stringa, che probabilmente non è il risultato desiderato. –

+0

Sfortunatamente no, prova a eseguire il cast prima di avere la possibilità di eseguire la sottostringa> 'La dimensione della stringa di destinazione è troppo piccola per rappresentare l'istanza XML' –

+0

Ignora il mio commento, probabilmente funzionerebbe anche se la sottostringa non è necessaria. –

3

Il problema che si sta eseguendo ha a che fare con il tentativo di convertire l'xml in varchar. Ho già incontrato un problema simile quando provavo a convertire una stringa XML molto più piccola della tua in NVARCHAR. Passare da un CONVERT a un CAST dovrebbe risolvere il tuo problema. Per quanto riguarda le dimensioni, è meglio impostarle su MAX.

Problemi correlati