Como você vê TODO o texto de um ntext ou nvarchar (max) no SSMS?


191

Como você visualiza TODO o texto de um NTEXT ou NVARCHAR (max) no SQL Server Management Studio? Por padrão, ele parece retornar apenas as primeiras centenas de caracteres (255?), Mas às vezes eu só quero uma maneira rápida de visualizar todo o campo, sem ter que escrever um programa para fazê-lo. Mesmo o SSMS 2012 ainda tem esse problema :(


Respostas:


91

Opções (Resultados da Consulta / SQL Server / Resultados para Grade)

Para alterar as opções para as consultas atuais, clique em Opções de consulta no menu Consulta ou clique com o botão direito do mouse na janela Consulta do SQL Server e selecione Opções de consulta.

...

Máximo de caracteres recuperados
Digite um número de 1 a 65535 para especificar o número máximo de caracteres que serão exibidos em cada célula.

O máximo é, como você vê, 64k. O padrão é muito menor.

Os resultados BTW para texto têm uma limitação ainda mais drástica:

Número máximo de caracteres exibidos em cada coluna
Esse valor é padronizado como 256. Aumente esse valor para exibir conjuntos de resultados maiores sem truncamento. O valor máximo é 8.192.


1
Como Remus escreveu em sua resposta, existem limitações, porque o tamanho máximo de armazenamento para o tipo de dados na coluna definido com MAX é de 2 GB, portanto, deve haver alguma limitação, pois seria complicado exibir todos esses dados no SSMS.
Ivan G

13
@IvanG - Na verdade não. Ele poderia apenas ser vinculado da mesma maneira que o XML e clicar nele abriria em uma nova janela. O trabalho em torno do qual eu normalmente uso é convertê-lo para XML como aqui . Os dados XML podem ser configurados para permitir um comprimento ilimitado.
Martin Smith

@MartinSmith Interessante, por isso, é possível fazer SSMS exibir tal grande quantidade de dados ...
Ivan G

11
Só funciona se o número de caracteres <65535, que está muito longe do máximo do ntext.
precisa saber é o seguinte

1
O @IvanG até 'Result to File' sofre com esse limite.
Iain

216

Consegui obter o texto completo (99.208 caracteres) de uma coluna NVARCHAR (MAX) selecionando (Results To Grid) apenas essa coluna e clicando com o botão direito do mouse nela e salvando o resultado como um arquivo CSV. Para visualizar o resultado, abra o arquivo CSV com um editor de texto (NÃO Excel). Engraçado o suficiente, quando tentei executar a mesma consulta, mas com a opção Resultados para arquivo ativada, a saída foi truncada usando o limite Resultados para texto.

A solução alternativa que o @MartinSmith descreveu como um comentário para a resposta (atualmente) aceita não funcionou para mim (ocorreu um erro ao tentar exibir o resultado XML completo reclamando sobre "O caractere '[', valor hexadecimal 0x5B, não pode ser incluído em um nome ").


17
Clique com o botão direito do mouse em Salvar como, pois o CSV funcionou para mim como um encanto para obter um grande valor de texto de um campo NTEXT.
David Alpert 28/05

3
@ ajeh: qual versão do SSMS 2012 você está usando? Acabei de testá-lo (segui as mesmas etapas exatas que descrevi na minha resposta) com o meu SSMS 2012 (versão 11.0.5343.0) e funciona
Eric

8
Mas não abra-o no Excel, a importação de CSV truncará os dados novamente. :)
Johncl 24/02

1
Obrigado, isso me permitiu exportar 7MB de dados de texto a partir de um campo varchar (max) usando SSMS 2012.
Brian Hasden

2
Salvar como texto delimitado por tabulação funciona melhor. O formato csv dobra todas as aspas no texto.
Davidthegrey

138

Truque rápido

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

6
Isso funciona perfeitamente (sem a parte CDATA) quando o conteúdo da coluna é realmente XML
axk

2
Isso funcionou para mim também, eu tinha dados json que eu precisava para sair do ms sql.
Dev_Corps

Além disso, o conteúdo é XML com escape. Depois de retirar o texto, você deve retirá-lo usando uma ferramenta como freeformatter.com.
harsimranb

Isso funcionou para mim: `` DECLARE @g geography; ... selecione Cast (@ g.ToString () como xml); ``
Sergei Zinovyev

1
Isso funcionou para mim com o SSMS v18 para visualizar a string json de 250kb que foi truncada por outras soluções. Além disso, eu gosto, porque fornece um link para um visualizador de texto. +!
Roberto

54

Eu escrevi um suplemento para SSMS e esse problema foi corrigido lá. Você pode usar uma das duas maneiras:

você pode usar "Copiar célula atual 1: 1" para copiar os dados originais da célula para a área de transferência:

http://www.ssmsboost.com/Features/ssms-add-in-copy-results-grid-cell-contents-line-with-breaksCopiar conteúdo da célula original

Ou, como alternativa, você pode abrir o conteúdo da célula no editor de texto externo (bloco de notas ++ ou bloco de notas) usando o recurso "Visualizadores de células": http://www.ssmsboost.com/Features/ssms-add-in-results-grid-visualizers

(o recurso permite abrir o conteúdo do campo em qualquer aplicativo externo; portanto, se você souber que é texto - use o editor de texto para abri-lo. Se o conteúdo for dados binários com imagem - selecione visualizar como imagem. A amostra abaixo mostra como abrir uma imagem ):Visualizadores de grade de resultados do SSMS


2
Parece uma extensão realmente útil, mas não posso aceitá-la como resposta, pois requer um produto comercial (ou teste). Obrigado embora!
NickG

4
+1 extensão gratuita agradável que funciona perfeitamente ... Obrigado!
usar o seguinte comando

2
Obrigado, isso faz exatamente o que eu quero.
Derreck Dean

9
Infelizmente, a partir de 04 de setembro de 2017, SSMS impulso já não é livre (exceto para um teste de 30 dias para cada nova versão lançada)
csrowell

4
Agora, este é um produto comercial, a licença gratuita não cobre nenhum dos recursos mencionados, eles estão desativados e você recebe um pop-up para comprar a versão PRO. A resposta é apenas uma promoção para o seu software.
metabuddy

3

Retornar dados como XML

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

Defina um limite razoável na janela de opções do SSMS, dependendo do resultado esperado. insira a descrição da imagem aqui

Isso funcionará se o texto que você está retornando não contiver caracteres não codificados, como em &vez disso, &amp;que fará com que a conversão XML falhe.

Retornando dados usando o PowerShell

Para isso, você precisará do módulo do PowerShell SQL Server instalado na máquina em que executará o comando.

Se tudo estiver configurado, configure e execute o seguinte 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"

Certifique-se de definir o -MaxCharLengthparâmetro para um valor que atenda às suas necessidades.


1

Alternativa 1 : Clique com o botão direito do mouse para copiar a célula e colar no Editor de Texto (espero que com suporte ao utf-8)

Alternativa 2 : clique com o botão direito e exporte para o arquivo CSV

Alternativa 3 : Use a função SUBSTRING para visualizar partes da coluna. Exemplo:

SELECT SUBSTRING (fileXml, 2200.200) FROM mytable WHERE id = 123456


0

Se você só precisa visualizá-lo, usei o seguinte:

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

O resultado final é que recebo feeds de linha e todo o conteúdo na janela de mensagens do SMSS. Obviamente, ele permite apenas uma única célula - se você quiser fazer uma única célula a partir de várias linhas, poderá fazer o seguinte:

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

Eu uso isso para validar seqüências JSON geradas pelo código SQL. Muito difícil de ler de outra maneira!


-1

A maneira mais fácil de visualizar rapidamente grandes colunas varchar / texto:

declare @t varchar(max)

select @t = long_column from table

print @t

11
Mas o texto ainda está truncado :-(
Rasmus
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.