¿Cómo ves TODO el texto de un ntext o nvarchar (max) en SSMS?


191

¿Cómo ve TODO el texto de un NTEXT o NVARCHAR (max) en SQL Server Management Studio? Por defecto, solo parece devolver los primeros cientos de caracteres (255?), Pero a veces solo quiero una forma rápida de ver todo el campo, sin tener que escribir un programa para hacerlo. Incluso SSMS 2012 todavía tiene este problema :(


Respuestas:


91

Opciones (Resultados de la consulta / Servidor SQL / Página Resultados a cuadrícula)

Para cambiar las opciones de las consultas actuales, haga clic en Opciones de consulta en el menú Consulta o haga clic con el botón derecho en la ventana Consulta de SQL Server y seleccione Opciones de consulta.

...

Máximo de caracteres recuperados
Ingrese un número del 1 al 65535 para especificar el número máximo de caracteres que se mostrarán en cada celda.

El máximo es, como ves, 64k. El valor predeterminado es mucho más pequeño.

BTW Results to Text tiene una limitación aún más drástica:

Número máximo de caracteres que se muestran en cada columna
Este valor predeterminado es 256. Aumente este valor para mostrar conjuntos de resultados más grandes sin truncamiento. El valor máximo es 8.192.


1
Como Remus escribió en su respuesta, hay limitaciones, ya que el tamaño máximo de almacenamiento para el tipo de datos en la columna definida con MAX es de 2 GB, por lo que debe haber alguna limitación porque sería engorroso mostrar todos esos datos en SSMS.
Ivan G

13
@IvanG - En realidad no. Simplemente podría estar hipervinculado de la misma manera que XML y hacer clic en él lo abriría en una nueva ventana. La solución que uso normalmente es convertirlo a XML como aquí . Los datos XML se pueden configurar para permitir una longitud ilimitada.
Martin Smith

@MartinSmith Interesante, por lo que es posible hacer que SSMS muestre una cantidad de datos tan grande ...
Ivan G

11
Solo funciona si el número de caracteres es <65535, que es muy inferior al máximo ntext.
Polyfun

1
@IvanG incluso 'Result to File' sufre de este límite.
Iain

216

Pude obtener el texto completo (99,208 caracteres) de una columna NVARCHAR (MAX) seleccionando (Resultados a la cuadrícula) solo esa columna y luego haciendo clic derecho sobre ella y luego guardando el resultado como un archivo CSV. Para ver el resultado, abra el archivo CSV con un editor de texto (NO Excel). Curiosamente, cuando traté de ejecutar la misma consulta, pero al tener Resultados a archivo habilitados, la salida se truncó usando el límite Resultados a texto.

La solución que @MartinSmith describió como un comentario a la respuesta (actualmente) aceptada no funcionó para mí (recibí un error al intentar ver el resultado XML completo quejándose de "El carácter '[', valor hexadecimal 0x5B, no puede ser incluido en un nombre ").


17
Hacer clic derecho, guardar como, en CSV funcionó para mí como un encanto para obtener un gran valor de texto de un campo NTEXT.
David Alpert

3
@ajeh: ¿qué versión de SSMS 2012 está utilizando? Simplemente lo probé (seguí los mismos pasos exactos que describí en mi respuesta) con mi SSMS 2012 (versión 11.0.5343.0) y funciona
Eric

8
Pero no lo abra en Excel, la importación CSV truncará los datos nuevamente. :)
Johncl

1
Gracias, esto me permitió exportar 7MB de datos de texto desde un campo varchar (max) usando SSMS 2012.
Brian Hasden

2
Guardar como texto delimitado por tabulaciones funciona mejor. El formato csv duplica todas las comillas en el texto.
davidthegrey

138

Truco rápido

SELECT CAST('<A><![CDATA[' + CAST(LogInfo as nvarchar(max)) + ']]></A>' AS xml)
FROM Logs
WHERE IDLog = 904862629

66
Esto funciona perfectamente (sin la parte CDATA) cuando el contenido de la columna es en realidad XML
axk

2
Esto también funcionó para mí, tenía datos json que necesitaba para salir de ms sql.
Dev_Corps

Además, los contenidos son XML escapado. Una vez que saque el texto, debe escapar de él usando una herramienta como freeformatter.com.
harsimranb

Esto funcionó para mí: `` `DECLARE @g geography; ... seleccione Cast (@ g.ToString () como xml); ``
Sergei Zinovyev

1
Esto funcionó para mí con SSMS v18 para ver una cadena json de 250 kb que fue truncada por otras soluciones. Además, me gusta porque te da un enlace a un visor de texto. +!
Roberto

54

He escrito un complemento para SSMS y este problema se soluciona allí. Puede usar una de 2 formas:

puede usar "Copiar celda actual 1: 1" para copiar datos de celda originales al portapapeles

http://www.ssmsboost.com/Features/ssms-add-in-copy-results-grid-cell-contents-line-with-breaksCopie el contenido original de la celda

O, alternativamente, puede abrir el contenido de la celda en un editor de texto externo (notepad ++ o notepad) usando la función "Visualizadores de celda": http://www.ssmsboost.com/Features/ssms-add-in-results-grid-visualizers

(la función permite abrir el contenido del campo en cualquier aplicación externa, por lo que si sabe que es texto, use el editor de texto para abrirlo. Si el contenido es datos binarios con imagen, seleccione ver como imagen. El ejemplo siguiente muestra cómo abrir una imagen ):Visualizadores de cuadrícula de resultados de SSMS


2
Parece una extensión realmente útil, pero no puedo aceptarla como respuesta ya que requiere un producto comercial (o prueba). Gracias sin embargo!
NickG

44
+1 Bonita extensión gratuita que funciona perfectamente ... ¡Gracias!
REPARADO el

2
Gracias, esto hace exactamente lo que quiero.
Derreck Dean

9
Desafortunadamente, a partir del 4 de septiembre de 2017, SSMS Boost ya no es gratuito (excepto por una prueba de 30 días por cada nueva versión lanzada)
csrowell

44
Este es ahora un producto comercial, la licencia gratuita no cubre ninguna de las características mencionadas, están deshabilitadas y aparece una ventana emergente para comprar la versión PRO. La respuesta es solo una promoción para su software.
metabuddy

3

Devolver datos como XML

SELECT CONVERT(XML, [Data]) AS [Value]
FROM [dbo].[FormData]
WHERE [UID] LIKE '{my-uid}'

Asegúrese de establecer un límite razonable en la ventana de opciones de SSMS, según el resultado que espera. ingrese la descripción de la imagen aquí

Esto funcionará si el texto que está devolviendo no contiene caracteres no codificados como en &lugar de&amp; eso, la conversión XML fallará.

Devolución de datos con PowerShell

Para esto necesitará el módulo PowerShell SQL Server instalado en la máquina en la que ejecutará el comando.

Si ya está todo configurado, configure y ejecute el siguiente script:

Invoke-Sqlcmd -Query "SELECT [Data] FROM [dbo].[FormData] WHERE [UID] LIKE '{my-uid}'" -ServerInstance "database-server-name" -Database "database-name" -Username "user" -Password "password" -MaxCharLength 10000000 | Out-File -filePath "C:\db_data.txt"

Asegúrese de establecer el -MaxCharLengthparámetro en un valor que se adapte a sus necesidades.


1

Alternativa 1 : haga clic derecho para copiar la celda y pegar en el editor de texto (con suerte con soporte utf-8)

Alternativa 2 : haga clic derecho y exporte a archivo CSV

Alternativa 3 : Use la función SUBSTRING para visualizar partes de la columna. Ejemplo:

SELECCIONE SUBSTRING (fileXml, 2200,200) DESDE mytable WHERE id = 123456


0

Si solo tiene que verlo, he usado esto:

print cast(dbo.f_functiondeliveringbigformattedtext(seed) as text)

El resultado final es que obtengo saltos de línea y todo el contenido en la ventana de mensajes de SMSS. Por supuesto, solo permite una sola celda; si desea hacer una sola celda de varias filas, puede hacer esto:

declare @T varchar(max)=''
select @T=@T
       + isnull(dbo.f_functiondeliveringbigformattedtext(x.a),'NOTHINGFOUND!')
       + replicate(char(13),4)
from x -- table containing multiple rows and a value in column a
print @T

Lo uso para validar cadenas JSON generadas por código SQL. Demasiado difícil de leer de otra manera!


-1

La forma más fácil de ver rápidamente una gran columna varchar / texto:

declare @t varchar(max)

select @t = long_column from table

print @t

11
Pero el texto todavía está truncado :-(
Rasmus
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.