In dieser Live-Datenbank von SQL Server 2008 (Build 10.0.1600) befindet sich eine Events
Tabelle, die eine text
Spalte mit dem Namen enthältDetails
. (Ja, mir ist klar, dass dies eigentlich eine varchar(MAX)
Spalte sein sollte, aber wer auch immer diese Datenbank eingerichtet hat, hat es nicht so gemacht.)
Diese Spalte enthält sehr große Protokolle mit Ausnahmen und zugehörigen JSON-Daten, auf die ich über SQL Server Management Studio zugreifen möchte. Wenn ich jedoch die Ergebnisse aus dem Raster in einen Texteditor kopiere, werden sie mit 43679 Zeichen abgeschnitten.
Ich habe an verschiedenen Stellen im Internet gelesen, dass Sie Ihre für XML-Daten abgerufenen maximalen Zeichen Tools > Options > Query Results > SQL Server > Results To Grid
auf Unbegrenzt setzen und dann eine Abfrage wie die folgende ausführen können:
select Convert(xml, Details) from Events
where EventID = 13920
(Beachten Sie, dass die Spalte "Daten" überhaupt nicht XML ist. CONVERT
Das Spalten der Spalte in XML ist lediglich eine Problemumgehung, die ich beim Googeln gefunden habe und die jemand anderes verwendet hat, um die Grenze zu umgehen, die SSMS beim Abrufen von Daten aus a hattext
oder einer varchar(MAX)
Spalte hat.)
Nachdem ich die obige Option festgelegt, die Abfrage ausgeführt und auf den Link im Ergebnis geklickt habe, wird weiterhin der folgende Fehler angezeigt:
XML kann nicht angezeigt werden. Der folgende Fehler ist aufgetreten: Unerwartetes Dateiende ist aufgetreten. Zeile 5, Position 220160.
Eine Lösung besteht darin, die Anzahl der vom Server für XML-Daten abgerufenen Zeichen zu erhöhen. Um diese Einstellung zu ändern, klicken Sie im Menü Extras auf Optionen.
Haben Sie eine Idee, wie Sie auf diese Daten zugreifen können? Würde varchar(MAX)
ich die Spalte konvertieren, um meine Probleme zu beheben?
quelle
CDATA
funktioniert möglicherweise, aber wenn Ihre Daten Steuerzeichen enthalten, müssen Sie einen Ersetzungsvorgang ausführen. In meinem Fall habe ich den Einheitentrenner ASCII-Code 31 in meinen Daten verwendet. Da ich an vielen Stellen nur dieses eine Zeichen benutzte,REPLACE(details, char(31), '&x1f;')
genügte ein einfaches . Wenn ich unbekannte Zeichen oder eine große Anzahl verschiedener Zeichen ersetzen musste, musste ich möglicherweise eine andere Lösung finden.CDATA
Ding war mein erster Vorschlag. Der spätereAS [processing-instruction(x)]
vermeidet das.Ich konnte das zum Laufen bringen ...
quelle
Eine Problemumgehung besteht darin, mit der rechten Maustaste auf die Ergebnismenge zu klicken und "Ergebnisse speichern unter ..." auszuwählen. Dadurch wird es in eine CSV-Datei mit dem gesamten Inhalt der Spalte exportiert. Nicht perfekt, aber gut genug für mich funktioniert.
quelle
Haben Sie diese einfache Lösung ausprobiert? Nur 2 Klicks entfernt!
Im Abfragefenster
Sie erhalten den gesamten Text, den Sie in der Datei sehen möchten !!! Ich kann 130.556 Zeichen für mein Ergebnis eines Varchar (MAX) -Felds sehen
quelle
Die einfachste Problemumgehung besteht darin, die Tabelle zu sichern und das Skript anzuzeigen. Um dies zu tun
Tasks
>Generate Scripts...
Next
Select specific database objects
und wählen Sie Ihre Tabelle.Next
Save scripts to a specific location
Save to file
die entsprechenden Optionen aus und füllen Sie sie ausAdvanced
SchaltflächeGeneral
>Types of data to script
aufData only
oder einSchema and Data
und klicken Sie auf OKNext
quelle
Der Datentyp TEXT ist alt und sollte nicht mehr verwendet werden. Es ist schwierig, Daten aus einer TEXT-Spalte auszuwählen.
Text, Text und Bild (Transact-SQL)
Sie müssen TEXTPTR (Transact-SQL) verwenden , um die Textdaten abzurufen.
Lesen Sie auch diesen Artikel zum Umgang mit dem Textdatentyp .
quelle
varchar(MAX)
um zu verhindern , dass SSMS die Daten abschneidet?Es hört sich so an, als ob die XML-Datei möglicherweise nicht gut geformt ist. Wenn dies der Fall ist, können Sie es nicht als XML umwandeln. Angesichts dessen ist die Anzahl der Texte, die Sie in Management Studio zurückgeben können, begrenzt. Sie können den Text jedoch wie folgt in kleinere Teile aufteilen:
Sie müssten sie dann erneut manuell kombinieren.
BEARBEITEN
Es hört sich so an, als ob die
text
Daten einige Zeichen enthalten, die dem XML-Parser nicht gefallen. Sie können versuchen, diese Werte in Entitäten zu konvertieren, und dann denConvert(xml, data)
Trick ausprobieren . Also so etwas wie:(Ich musste in varchar (max) umwandeln, da die Ersetzungsfunktion für
text
Spalten nicht funktioniert . Es sollte keinen Grund geben, warum Sie diesetext
Spalten nicht konvertieren konntenvarchar(max)
.)quelle
text
oder einervarchar(MAX)
Spalte hat.TSQL
from @IanQuigley basierend auf dieser Antwort hat für mich gut funktioniert. Ich habe im Grunde genommen die Ergebnisse (am Ende waren es 11 Datensätze) genommen und sie einfach im Editor zusammengefügt. Hat perfekt funktioniert. Müssen Sie dieses Skript speichern. Ich hatte einige verrückte lange XML-Dateien, die ungültige Zeichen enthielten.Ich bevorzuge diesen einfachen XML-Hack, mit dem Spalten in SSMS zellenweise angeklickt werden können. Mit dieser Methode können Sie Ihre Daten schnell in der tabellarischen Ansicht von SSMS anzeigen und auf bestimmte Zellen klicken, um den vollständigen Wert anzuzeigen, wenn sie interessant sind. Dies ist identisch mit der OP-Technik, außer dass die XML-Fehler vermieden werden.
quelle
NVARCHAR
/ jedoch gültig sindVARCHAR
. Zum Beispiel das NUL-Zeichen (andersNULL
als als Wert für das Feld). Die Umwandlung schlägt für Zeichenfolgen mit solchen eingebetteten Werten fehl.Ab SSMS 18.2 können Sie jetzt bis zu 2 Millionen Zeichen in den Rasterergebnissen anzeigen. Quelle
Ich habe dies mit dem folgenden Code überprüft.
quelle
Du hast kein Glück, denke ich. Das Problem ist kein Problem auf SQL-Ebene, da sich alle anderen Antworten auf etwas zu konzentrieren scheinen, sondern lediglich eine der Benutzeroberflächen. Management Studio ist nicht als allgemeine / allgemeine Datenzugriffsschnittstelle gedacht. Es ist nicht dazu da, Ihre Schnittstelle zu sein, sondern Ihr Verwaltungsbereich, und es gibt schwerwiegende Einschränkungen beim Umgang mit Binärdaten und großen Testdaten, da Personen, die es innerhalb des angegebenen Nutzungsprofils verwenden, nicht auf dieses Problem stoßen.
Das Präsentieren großer Textdaten ist einfach nicht die geplante Verwendung.
Ihre einzige Wahl wäre eine Tabellenwertfunktion, die die Texteingabe übernimmt und sie für jede Zeile in Zeilen schneidet, sodass Management Studio eine Liste von Zeilen erhält, nicht eine einzelne Zeile.
quelle