2012-07-17 63 views
5

Tengo una columna de SQL Server de tipo XML que contiene algunos registros con más de 8000 caracteres.¿Cómo convierto un campo XML con más de 8000 caracteres en una cadena?

Me gustaría convertir esta columna en varchar.

No me preocupa el truncamiento (los primeros 8000 caracteres están bien).

Sin embargo, cada vez que intento CONVERT(varchar(8000), Content) consigo un error:

Target string size is too small to represent the XML instance

Cuando intento CONVERT(varchar(MAX), Content) consigo un error:

String or binary data would be truncated

Cuando intento CONVERT(varchar(20000), Content) consigo un error:

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

Cuando intento CONVERT(text, Content) me sale un error:

Explicit conversion from data type xml to text is not allowed

¿Hay una solución?

+2

La conversión a 'varchar (max)' debería funcionar bien. [Como esto lo hace.] (Http://data.stackexchange.com/stackoverflow/query/75495). –

+0

Tal vez es la configuración, entonces ... ciertamente recibo un error. –

+0

@MikaelEriksson - Publique eso como una respuesta y lo aceptaré. Hice una tontería (el contexto particular en el que estaba usando convertir provocó un problema que surgió). –

Respuesta

8

moldeada a varchar(max) debería funcionar bien. Probablemente tengas un problema en otro lado. Obtendrá ese error si intenta insertar/actualizar una columna con el tipo de datos varchar(8000).

+1

El problema fue pasarlo a una función 'hashbytes' que tiene un límite máximo de 8000 :-) –

+0

Escribí el caso de uso particular que tenía aquí: http://mattmitchell.com.au/detecting-duplicate-xml-data -en-sql-servidor / –

1

nunca he tenido esta necesidad en particular, pero de otra manera me gustaría probar habría

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

Esto truncará la cadena, que probablemente no sea el resultado deseado. –

+0

Lamentablemente no, trata de transmitir antes de que tenga la oportunidad de subscribirlo> 'El tamaño de cadena de destino es demasiado pequeño para representar la instancia XML' –

+0

Ignore mi comentario, esto probablemente funcionaría aunque la subcadena no sea necesaria. –

3

El problema con el que te encuentras tiene que ver con intentar convertir el xml en varchar. Me he encontrado con un problema similar antes al intentar convertir una cadena XML que es mucho más pequeña que la tuya en NVARCHAR. Cambiar de un CONVERTIR a un CAST debería resolver su problema. En cuanto al tamaño, es mejor que simplemente establezcas MAX.

Cuestiones relacionadas