Come visualizzi TUTTO il testo da un ntext o nvarchar (max) in SSMS?


193

Come si visualizza TUTTO il testo da un NTEXT o NVARCHAR (max) in SQL Server Management Studio? Per impostazione predefinita, sembra solo restituire le prime centinaia di caratteri (255?), Ma a volte voglio solo un modo rapido di visualizzare l'intero campo, senza dover scrivere un programma per farlo. Anche SSMS 2012 presenta ancora questo problema :(


1
possibile duplicato di come ottenere l'intero
Martin Smith,

Risposte:


91

Opzioni (Risultati query / SQL Server / Risultati alla pagina griglia)

Per modificare le opzioni per le query correnti, fare clic su Opzioni query nel menu Query oppure fare clic con il pulsante destro del mouse nella finestra Query di SQL Server e selezionare Opzioni query.

...


Numero massimo di caratteri recuperati Immettere un numero compreso tra 1 e 65535 per specificare il numero massimo di caratteri che verranno visualizzati in ciascuna cella.

Il massimo è, come vedi, 64k. L'impostazione predefinita è molto più piccola.

BTW Results to Text ha limitazioni ancora più drastiche:

Numero massimo di caratteri visualizzati in ciascuna colonna
Questo valore predefinito è 256. Aumentare questo valore per visualizzare set di risultati più grandi senza troncamento. Il valore massimo è 8.192.


1
Come ha scritto Remus nella sua risposta, ci sono delle limitazioni, poiché la dimensione massima di archiviazione per il tipo di dati nella colonna definita con MAX è di 2 GB, quindi devono esserci delle limitazioni perché sarebbe scomodo visualizzare tutti quei dati in SSMS.
Ivan G

13
@IvanG - Non proprio. Potrebbe essere semplicemente collegato ipertestuale allo stesso modo di XML e facendo clic su di esso si aprirà in una nuova finestra. Il lavoro che utilizzo normalmente è di lanciarlo in XML come qui . I dati XML possono essere impostati per consentire una lunghezza illimitata.
Martin Smith,

@MartinSmith Interessante, quindi è possibile fare in modo che SSMS mostri una quantità così grande di dati ...
Ivan G

11
Funziona solo se il numero di caratteri <65535, che è molto più corto del massimo ntext.
Polyfun,

1
@IvanG anche 'Result to File' soffre di questo limite.
Iain,

217

Sono stato in grado di ottenere il testo completo (99.208 caratteri) da una colonna NVARCHAR (MAX) selezionando (Risultati per griglia) solo quella colonna e quindi facendo clic con il pulsante destro del mouse su di essa e salvando il risultato come file CSV. Per visualizzare il risultato, apri il file CSV con un editor di testo (NON Excel). Abbastanza divertente, quando ho provato a eseguire la stessa query, ma con Risultati su file abilitati, l'output è stato troncato utilizzando il limite Risultati su testo.

Il problema che @MartinSmith ha descritto come un commento alla risposta (attualmente) accettata non ha funzionato per me (si è verificato un errore durante il tentativo di visualizzare il risultato XML completo lamentandosi di "Il carattere '[', valore esadecimale 0x5B, non può essere incluso in un nome ").


17
Fare clic con il tasto destro, salva con nome, su CSV ha funzionato per me come un incantesimo per ottenere un enorme valore di testo da un campo NTEXT.
David Alpert,

3
@ajeh: quale versione di SSMS 2012 stai usando? L'ho appena testato (ho seguito gli stessi esatti passaggi descritti nella mia risposta) con il mio SSMS 2012 (versione 11.0.5343.0) e funziona
Eric

8
Ma non aprirlo in Excel, l'importazione CSV troncherà nuovamente i dati. :)
Johncl

1
Grazie, questo mi ha permesso di esportare 7 MB di dati di testo da un campo varchar (max) utilizzando SSMS 2012.
Brian Hasden

2
Il salvataggio come testo delimitato da tabulazioni funziona meglio. Il formato CSV raddoppia tutte le virgolette nel testo.
davidthegrey,

140

Trucco veloce

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

6
Funziona perfettamente (senza la parte CDATA) quando il contenuto della colonna è in realtà XML
axk

2
Questo ha funzionato anche per me, avevo dati json di cui avevo bisogno per uscire da ms sql.
Dev_Corps,

1
Inoltre, i contenuti sono sottoposti a escape XML. Una volta estratto il testo, dovresti toglierlo di mezzo usando uno strumento come freeformatter.com.
harsimranb,

Questo ha funzionato per me: `` DECLARE @g geografia; ... seleziona Cast (@ g.ToString () come xml); ``
Sergei Zinovyev il

1
Questo ha funzionato per me con SSMS v18 per visualizzare una stringa json da 250kb che è stata troncata da altre soluzioni. Inoltre mi piace perché ti dà un link a un visualizzatore di testo. +!
Roberto,

54

Ho scritto un componente aggiuntivo per SSMS e questo problema è stato risolto lì. Puoi usare uno dei 2 modi:

puoi usare "Copia la cella corrente 1: 1" per copiare i dati della cella originale negli appunti:

http://www.ssmsboost.com/Features/ssms-add-in-copy-results-grid-cell-contents-line-with-breaksCopia il contenuto della cella originale

Oppure, in alternativa, puoi aprire il contenuto della cella nell'editor di testo esterno (notepad ++ o notepad) utilizzando la funzione "Visualizzatori di celle": http://www.ssmsboost.com/Features/ssms-add-in-results-grid-visualizers

(la funzione consente di aprire i contenuti del campo in qualsiasi applicazione esterna, quindi se sai che è un testo, usi l'editor di testo per aprirlo. Se il contenuto è un dato binario con un'immagine, seleziona visualizza come immagine. L'esempio sotto mostra l'apertura di un'immagine ):Visualizzatori griglia risultati SSMS


2
Sembra un'estensione davvero utile, ma non posso accettarlo come risposta in quanto richiede un prodotto commerciale (o prova). Grazie comunque!
NickG

4
+1 Bella estensione gratuita che funziona perfettamente ... Grazie!
REVISIONATO il

2
Grazie, fa esattamente quello che voglio.
Derreck Dean,

9
Sfortunatamente, a partire dal 4 settembre 2017, SSMS Boost non è più gratuito (ad eccezione di una versione di prova di 30 giorni per ogni nuova versione rilasciata)
csrowell,

4
Questo è ora un prodotto commerciale, la licenza gratuita non copre nessuna delle funzionalità menzionate, sono disabilitate e si ottiene un pop-up per acquistare la versione PRO. La risposta è solo una promozione per il suo software.
metabuddy

3

Restituisce i dati come XML

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

Assicurati di impostare un limite ragionevole nella finestra delle opzioni SSMS, a seconda del risultato che ti aspetti. inserisci qui la descrizione dell'immagine

Questo funzionerà se il testo che stai restituendo non contiene caratteri non codificati come &invece di &amp;quello causerà il fallimento della conversione XML.

Restituzione di dati tramite PowerShell

Per questo avrai bisogno del modulo PowerShell SQL Server installato sul computer su cui eseguirai il comando.

Se sei pronto, configura ed esegui il seguente 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"

Assicurarsi di impostare il -MaxCharLengthparametro su un valore adatto alle proprie esigenze.


1

Alternativa 1 : fare clic con il tasto destro per copiare la cella e incollare nell'editor di testo (si spera con il supporto utf-8)

Alternativa 2 : fare clic con il pulsante destro del mouse ed esportare in file CSV

Alternativa 3 : utilizzare la funzione SUBSTRING per visualizzare parti della colonna. Esempio:

SELEZIONA SUBSTRING (fileXml, 2200.200) DA mytable DOVE id = 123456


0

Se devi solo vederlo, ho usato questo:

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

Il risultato finale è che ottengo feed di riga e tutto il contenuto nella finestra dei messaggi di SMSS. Ovviamente, consente solo una singola cella: se si desidera eseguire una singola cella da un numero di righe, è possibile farlo:

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 per convalidare le stringhe JSON generate dal codice SQL. Troppo difficile da leggere altrimenti!


-1

Il modo più semplice per visualizzare rapidamente grandi colonne varchar / text:

declare @t varchar(max)

select @t = long_column from table

print @t

11
Ma il testo è ancora troncato :-(
Rasmus
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.