2012-06-14 25 views
6

Ok, estoy usando SQL Server 2008 y tengo un campo de tabla de tipo VARCHAR(MAX). El problema es que al guardar la información utilizando Hibernate, el contenido del campo VARCHAR(MAX) quedan truncados. No veo ningún mensaje de error en el servidor de la aplicación ni en el servidor de la base de datos.El campo SQL Server se truncó

El contenido de este campo es solo un archivo de texto sin formato. El tamaño de este archivo de texto es 383 KB.

Esto es lo que he hecho hasta ahora para solucionar este problema:

  1. cambiado el campo de la base de datos de VARCHAR(MAX) a texto y se produce mismo problema.

  2. usado el Analizador de SQL Server y me di cuenta de que el contenido de texto completo está siendo
    recibida por el servidor de base de datos, pero por alguna razón el generador de perfiles se congela cuando se trata para ver el SQL con el problema de truncamiento. Como dije, justo antes de que se congele, I
    noté que se está recibiendo el contenido del archivo de texto completo (383KB), por lo que parece que podría ser el problema de la base de datos.

¿Alguien ha encontrado este problema antes? ¿Alguna idea de lo que causa este truncamiento?

NOTA: solo quiero mencionar que acabo de entrar en SQL Studio y simplemente copiar el contenido del campo TEXTO y pegarlo en el Textpad. Así es como noté que se está truncando.

Gracias de antemano.

+1

Una sugerencia de que no tiene nada que ver con mi respuesta: dejar de usar Profiler. Use un rastreo del lado del servidor en su lugar. –

+0

@ AaronBertrand ¿Podría explicar por qué desaconseja el uso de Profiler? – Apostrofix

+1

@Apostrofix Because Profiler puede poner a su servidor de rodillas. También puede hacer un seguimiento y también eventos extendidos, pero es mucho más fácil hacerlo con Profiler. De [este artículo] (http://sqlperformance.com/2012/10/sql-trace/observer-overhead-trace-extended-events): 'SQL Server Profiler es una herramienta que debe evitarse en los servidores de producción ocupados, como se muestra por el aumento de diez veces en la duración y la reducción significativa en el rendimiento para la repetición. –

Respuesta

17

Su problema es que cree que Management Studio le presentará todos los datos. No es así Vaya a Herramientas> Opciones> Resultados de la consulta> Servidor SQL. Si usa Results to Grid, cambie "Maximum Characters Retrieved" para "Non XML data" (solo tenga en cuenta que Results to Grid eliminará cualquier CR/LF). Si está utilizando Resultados para Texto, cambie "Número máximo de caracteres que se muestran en cada columna".

enter image description here

Usted puede estar tentado a entrar más, pero el máximo que se puede volver en el plazo de gestión Studio es:

65535 for Results to Grid 
8192 for Results to Text 

Si realmente desea ver todos los datos en el estudio de la gerencia, puede intente convertirlo a XML, pero esto también tiene problemas. Primer Set resultados con los datos de cuadrícula> XML a 5 MB o ilimitado, a continuación, hacer:

SELECT CONVERT(XML, column) FROM dbo.table WHERE... 

Ahora bien, esto producirá un resultado cuadrícula donde el enlace es en realidad puede hacer clic. Esto abrirá una nueva ventana de editor (no será una ventana de consulta, por lo que no tendrá botones de ejecución, IntelliSense, etc.) con sus datos convertidos a XML. Esto significa que reemplazará > con > etc.Aquí hay un ejemplo rápido:

SELECT CONVERT(XML, 'bob > sally'); 

Resultado:

enter image description here

Al hacer clic en la parrilla, se obtiene esta nueva ventana:

enter image description here

(Lo hace tipo de tiene IntelliSense, validando el formato XML, que es la razón por la que ve los squigglies.)

en el rancho

Si lo que desea es prueba de cordura y realmente no quiere copiar todos 383K en otro lugar, entonces no lo hagas! Sólo echa usando:

SELECT DATALENGTH(column) FROM dbo.table WHERE... 

Esto debe mostrar que sus datos fue capturado por la base de datos, y el problema es la herramienta y su método de verificación.

(he escrito desde entonces a tip about this here.)

+0

Sí, estás en lo correcto. Tenía los resultados predeterminados para Grid. Sí, me di cuenta de esto después de que tuve que escribir un programa ficticio para leer de la base de datos y escribir ese campo en un archivo. Muchas gracias, la primera vez que me encontré con este problema. – Marquinio

+2

'SELECT CONVERT (XML, 'bob & sally')' falla con 'XML Prsing: línea 1, carácter 6, carácter de nombre ilegal'. Podría usar 'SELECT 'bob & sally' FOR XML PATH ('')' pero eso da 'bob & sally'. Prefiero 'SELECCIONAR 'bob & sally' AS [processing-instruction (x)] FOR XML PATH ('')' para evitar la titulación. –

+0

@Martin buen punto, cuando uso XML de esta manera, generalmente es un atajo para mover cadenas mucho más básicas al panel superior. –

1

trate de usar SELECT * FROM dbo.table for XML PATH

Cuestiones relacionadas