Wie können Sie ALLEN Text aus einem ntext oder nvarchar (max) in SSMS anzeigen?

191

Wie können Sie ALLEN Text aus einem NTEXT oder NVARCHAR (max) in SQL Server Management Studio anzeigen? Standardmäßig werden nur die ersten paar hundert Zeichen (255?) Zurückgegeben, aber manchmal möchte ich nur eine schnelle Möglichkeit, das gesamte Feld anzuzeigen, ohne dafür ein Programm schreiben zu müssen. Auch SSMS 2012 hat noch dieses Problem :(

NickG
quelle
1
Mögliches Duplikat, wie man die vollständige Ergebnismenge von SSMS erhält
Martin Smith

Antworten:

91

Optionen (Abfrageergebnisse / SQL Server / Ergebnisse zur Rasterseite)

Um die Optionen für die aktuellen Abfragen zu ändern, klicken Sie im Menü Abfrage auf Abfrageoptionen oder klicken Sie mit der rechten Maustaste in das SQL Server-Abfragefenster und wählen Sie Abfrageoptionen.

...

Maximal abgerufene Zeichen
Geben Sie eine Zahl zwischen 1 und 65535 ein, um die maximale Anzahl von Zeichen anzugeben, die in jeder Zelle angezeigt werden.

Das Maximum ist, wie Sie sehen, 64k. Die Standardeinstellung ist viel kleiner.

BTW Results to Text hat noch drastischere Einschränkungen:

Maximale Anzahl der in jeder Spalte angezeigten Zeichen
Dieser Wert ist standardmäßig 256. Erhöhen Sie diesen Wert, um größere Ergebnismengen ohne Kürzung anzuzeigen. Der Maximalwert beträgt 8.192.

Remus Rusanu
quelle
1
Wie Remus in seiner Antwort schrieb, gibt es Einschränkungen, da die maximale Speichergröße für den Datentyp in der mit MAX definierten Spalte 2 GB beträgt. Daher muss es einige Einschränkungen geben, da die Anzeige all dieser Daten in SSMS umständlich wäre.
Ivan G
13
@IvanG - Nicht wirklich. Es könnte genauso wie XML verlinkt werden, und wenn Sie darauf klicken, wird es in einem neuen Fenster geöffnet. Die Arbeit, die ich normalerweise verwende, besteht darin, sie wie hier in XML umzuwandeln . XML-Daten können so eingestellt werden, dass eine unbegrenzte Länge möglich ist.
Martin Smith
@ MartinSmith Interessant, so ist es möglich, SSMS so große Datenmenge anzeigen zu lassen ...
Ivan G
11
Funktioniert nur, wenn die Anzahl der Zeichen <65535 ist, was weit unter dem ntext-Maximum liegt.
Polyfun
1
@IvanG sogar 'Result to File' leidet unter dieser Grenze.
Iain
216

Ich konnte den vollständigen Text (99.208 Zeichen) aus einer NVARCHAR-Spalte (MAX) abrufen, indem ich nur diese Spalte auswählte (Ergebnisse zu Raster) und dann mit der rechten Maustaste darauf klickte und das Ergebnis als CSV-Datei speicherte. Um das Ergebnis anzuzeigen, öffnen Sie die CSV-Datei mit einem Texteditor (NICHT Excel). Komischerweise wurde die Ausgabe mit dem Limit "Ergebnisse in Text" abgeschnitten, als ich versuchte, dieselbe Abfrage auszuführen, aber die Option "Ergebnisse in Datei" aktiviert hatte.

Die Umgehung, die @MartinSmith als Kommentar zur (derzeit) akzeptierten Antwort beschrieben hat, hat bei mir nicht funktioniert (beim Versuch, das vollständige XML-Ergebnis anzuzeigen, das sich über "Das Zeichen '[', Hexadezimalwert 0x5B, kann nicht angezeigt", ist ein Fehler aufgetreten in einem Namen enthalten sein ").

Eric
quelle
17
Rechtsklick, Speichern unter, in CSV hat für mich wie ein Zauber funktioniert, um einen riesigen Textwert aus einem NTEXT-Feld herauszuholen.
David Alpert
3
@ajeh: Welche Version von SSMS 2012 verwenden Sie? Ich habe es gerade mit meinem SSMS 2012 (Version 11.0.5343.0) getestet (genau die gleichen Schritte befolgt, die ich in meiner Antwort beschrieben habe) und es funktioniert
Eric
8
Öffnen Sie es jedoch nicht in Excel, da der CSV-Import die Daten erneut abschneidet. :)
Johncl
1
Vielen Dank, dies ermöglichte mir das Exportieren von 7 MB Textdaten aus einem Varchar (max) -Feld mit SSMS 2012.
Brian Hasden
2
Das Speichern als durch Tabulatoren getrennter Text funktioniert besser. Das CSV-Format verdoppelt alle Anführungszeichen im Text.
Davidthegrey
138

Schneller Trick-

SELECT CAST('<A><![CDATA[' + CAST(LogInfo as nvarchar(max)) + ']]></A>' AS xml)
FROM Logs
WHERE IDLog = 904862629
André Kops
quelle
6
Dies funktioniert perfekt (ohne den CDATA-Teil), wenn der Inhalt der Spalte tatsächlich XML ist
axk
2
Dies funktionierte auch für mich. Ich hatte JSON-Daten, die ich brauchte, um aus MS SQL herauszukommen.
Dev_Corps
Außerdem ist der Inhalt XML-maskiert. Sobald Sie den Text herausgenommen haben, sollten Sie ihn mit einem Tool wie freeformatter.com entfernen.
Harsimranb
Das hat bei mir funktioniert: `` `DECLARE @g geography; ... Cast (@ g.ToString () als XML auswählen); `` `
Sergei Zinovyev
1
Dies funktionierte für mich mit SSMS v18, um 250-KB-JSON-Zeichenfolgen anzuzeigen, die von anderen Lösungen abgeschnitten wurden. Außerdem gefällt es mir, weil es Ihnen einen Link zu einem Textbetrachter gibt. +!
Roberto
54

Ich habe ein Add-In für SSMS geschrieben und dieses Problem ist dort behoben. Sie haben zwei Möglichkeiten:

Mit "Aktuelle Zelle 1: 1 kopieren" können Sie die ursprünglichen Zellendaten in die Zwischenablage kopieren:

http://www.ssmsboost.com/Features/ssms-add-in-copy-results-grid-cell-contents-line-with-breaksKopieren Sie den ursprünglichen Zelleninhalt

Alternativ können Sie den Zelleninhalt in einem externen Texteditor (Editor ++ oder Editor) mit der Funktion "Zellenvisualisierer" öffnen: http://www.ssmsboost.com/Features/ssms-add-in-results-grid-visualizers

(Mit dieser Funktion können Feldinhalte in jeder externen Anwendung geöffnet werden. Wenn Sie also wissen, dass es sich um Text handelt, verwenden Sie den Texteditor, um ihn zu öffnen. Wenn es sich bei dem Inhalt um Binärdaten mit Bild handelt, wählen Sie Ansicht als Bild aus. Das folgende Beispiel zeigt das Öffnen eines Bildes ):SSMS-Ergebnisraster-Visualisierer

Andrei Rantsevich
quelle
2
Sieht nach einer wirklich nützlichen Erweiterung aus, aber ich kann sie nicht als Antwort akzeptieren, da ein kommerzielles Produkt (oder eine Testversion) erforderlich ist. Trotzdem danke!
NickG
4
+1 Schöne kostenlose Erweiterung, die perfekt funktioniert ... Danke!
ReSPAWNed
2
Danke, das macht genau das, was ich will.
Derreck Dean
9
Leider ist SSMS Boost ab dem 4. September 2017 nicht mehr kostenlos (mit Ausnahme einer 30-Tage-Testversion für jede neue Version)
csrowell
4
Dies ist jetzt ein kommerzielles Produkt. Die kostenlose Lizenz deckt keine der genannten Funktionen ab. Sie sind deaktiviert und Sie erhalten ein Popup zum Kauf der PRO-Version. Die Antwort ist nur eine Werbung für seine Software.
Metabuddy
3

Daten als XML zurückgeben

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

Stellen Sie sicher, dass Sie im Fenster mit den SSMS-Optionen einen angemessenen Grenzwert festlegen, abhängig vom erwarteten Ergebnis. Geben Sie hier die Bildbeschreibung ein

Dies funktioniert, wenn der zurückgegebene Text keine nicht codierten Zeichen wie &statt enthält&amp; , dass die XML - Konvertierung fehlschlagen verursachen.

Rückgabe von Daten mit PowerShell

Dazu benötigen Sie das PowerShell SQL Server-Modul auf dem Computer installiert sein, auf dem Sie den Befehl ausführen.

Wenn Sie alle eingerichtet sind, konfigurieren Sie das folgende Skript und führen Sie es aus:

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"

Stellen Sie sicher, dass Sie den -MaxCharLengthParameter auf einen Wert einstellen, der Ihren Anforderungen entspricht.

dvlsc
quelle
1

Alternative 1 : Klicken Sie mit der rechten Maustaste, um die Zelle zu kopieren und in den Texteditor einzufügen (hoffentlich mit Unterstützung von utf-8).

Alternative 2 : Klicken Sie mit der rechten Maustaste und exportieren Sie in die CSV-Datei

Alternative 3 : Verwenden Sie die SUBSTRING-Funktion, um Teile der Spalte zu visualisieren. Beispiel:

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

Don G.
quelle
0

Wenn Sie es nur anzeigen müssen, habe ich Folgendes verwendet:

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

Das Endergebnis ist, dass ich Zeilenvorschübe und den gesamten Inhalt im Nachrichtenfenster von SMSS erhalte. Natürlich ist nur eine einzelne Zelle zulässig. Wenn Sie eine einzelne Zelle aus mehreren Zeilen erstellen möchten, können Sie Folgendes tun:

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

Ich verwende dies, um JSON-Zeichenfolgen zu validieren, die durch SQL-Code generiert wurden. Sonst zu schwer zu lesen!

CDenby
quelle
-1

Der einfachste Weg, um schnell eine große Varchar- / Textspalte anzuzeigen:

declare @t varchar(max)

select @t = long_column from table

print @t
Rafael Lenartowicz
quelle
11
Aber der Text ist immer noch abgeschnitten :-(
Rasmus