Frage Wie zeige ich den vollständigen Inhalt einer Text- oder Varcharspalte (MAX) in SQL Server 2008 Management Studio an?


In dieser Live-SQL Server 2008-Datenbank (Build 10.0.1600) gibt es eine Events Tabelle, die a enthält text Spalte benannt Details. (Ja, ich weiß, das sollte eigentlich ein sein varchar(MAX) Spalte, aber wer 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 versuche, über SQL Server Management Studio zuzugreifen, aber wenn ich die Ergebnisse aus dem Raster in einen Texteditor kopiere, wird der Wert auf 43679 Zeichen gekürzt.

Ich habe an verschiedenen Stellen im Internet gelesen, dass Sie Ihre maximale Anzahl von Zeichen für XML-Daten festlegen können Tools > Options > Query Results > SQL Server > Results To Grid zu Unbegrenzt, und führen Sie dann eine Abfrage wie folgt aus:

select Convert(xml, Details) from Events
where EventID = 13920

(Beachten Sie, dass die Daten Spalte ist überhaupt kein XML. CONVERTDie Spalte in XML ist lediglich eine Problemumgehung, die ich beim Googlen gefunden habe, die jemand anderes verwendet hat, um das Limit zu umgehen, das SSMS beim Abrufen von Daten aus einem text oder varchar(MAX) Säule.)

Nach dem Festlegen der obigen Option, dem Ausführen der Abfrage und dem Klicken auf den Link im Ergebnis wird jedoch weiterhin der folgende Fehler angezeigt:

XML kann nicht angezeigt werden. Der folgende Fehler ist aufgetreten:   Unerwartetes Dateiende ist aufgetreten. Linie 5, Position 220160.

Eine Lösung besteht darin, die Anzahl der vom Server abgerufenen Zeichen für XML-Daten zu erhöhen. Um diese Einstellung zu ändern, klicken Sie im Menü Extras auf Optionen.

Damit, eine Idee, wie man auf diese Daten zugreifen kann? Würde die Spalte in konvertieren varchar(MAX) repariere meine Sorgen?


75
2018-05-03 16:58


Ursprung


Antworten:


Ein Trick, der unter sehr begrenzten Umständen funktionieren könnte, besteht darin, die Spalte wie folgt in einer speziellen Weise zu benennen.

DECLARE @S varchar(max) = 'A'

SET @S =  REPLICATE(@S,100000) + 'B' 

SELECT @S as [XML_F52E2B61-18A1-11d1-B105-00805F49916B]

In SSMS 2012 und 2014 zeigt dies die Ergebnisse wie folgt an

enter image description here

Durch Klicken darauf werden die vollständigen Ergebnisse im XML-Viewer geöffnet. Scrollen nach rechts zeigt, dass das letzte Zeichen von B erhalten bleibt,

Dies hat jedoch einige erhebliche Probleme. Wenn Sie der Abfrage zusätzliche Spalten hinzufügen, wird der Effekt unterbrochen und zusätzliche Zeilen werden mit dem ersten verkettet. Schließlich, wenn die Zeichenfolge Zeichen wie < Das Öffnen des XML-Viewers schlägt mit einem Parsing-Fehler fehl.

Eine robustere Methode, um Probleme bei der SQL Server-Konvertierung zu vermeiden < zu &lt; usw. oder aufgrund dieser Zeichen fehlgeschlagen ist unten (Kredit Adam Machanic hier).

DECLARE @S varchar(max)

SELECT @S = ''

SELECT @S = @S + '
' + OBJECT_DEFINITION(OBJECT_ID) FROM SYS.PROCEDURES

SELECT @S AS [processing-instruction(x)] FOR XML PATH('')

76
2018-05-03 17:47



Ich konnte das zur Arbeit bringen ...

SELECT CAST('<![CDATA[' + LargeTextColumn + ']]>' AS XML) FROM TableName;

29
2018-04-01 17:20



Ein Problem besteht darin, mit der rechten Maustaste auf die Ergebnismenge zu klicken und "Ergebnisse speichern unter ..." auszuwählen. Dies exportiert es in eine CSV-Datei mit dem gesamten Inhalt der Spalte. Nicht perfekt, aber funktionierte gut genug für mich.

Workaround


10
2018-03-08 19:45



Hast du diese einfache Lösung versucht? Nur 2 Klicks entfernt!

Im Abfragefenster

  1. Setzen Sie die Abfrageoptionen auf "Results to Grid", führen Sie Ihre Abfrage aus
  2. Klicken Sie mit der rechten Maustaste auf die Registerkarte Ergebnisse in der Rasterecke und speichern Sie die Ergebnisse als Dateien

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) -Feldes sehen

Results in a file


5
2017-12-05 22:39



Die einfachste Problemumgehung, die ich gefunden habe, besteht darin, die Tabelle zu sichern und das Skript anzuzeigen. Um dies zu tun

  1. Klicken Sie mit der rechten Maustaste auf Ihre Datenbank und wählen Sie Tasks > Generate Scripts...
  2. Klicken Sie auf die Seite "Einführung" Next
  3. "Wählen Sie Objekte" Seite
    1. Wählen Sie das Select specific database objects und wähle deine Tabelle aus.
    2. Klicken Next
  4. "Festlegen der Skriptoptionen" Seite
    1. Setzen Sie den Ausgabetyp auf Save scripts to a specific location
    2. Wählen Save to file und füllen Sie die zugehörigen Optionen aus
    3. Drücke den Advanced Taste
    4. einstellen General > Types of data to script zu Data only oder Schema and Data und klicke OK
    5. Klicken Next
  5. "Zusammenfassung Seite" klicke weiter
  6. Ihr SQL-Skript sollte basierend auf den Optionen erstellt werden, die Sie in 4.2 festgelegt haben. Öffnen Sie diese Datei und sehen Sie sich Ihre Daten an.

4
2018-03-13 14:46



Der Datentyp TEXT ist alt und sollte nicht mehr verwendet werden. Es ist mühsam, Daten aus einer TEXT-Spalte auszuwählen.

ntext, Text und Bild (Transact-SQL) 

ntext-, text- und image-Datentypen   wird in einer zukünftigen Version von entfernt   Microsoft SQL Server. Vermeide das Benutzen   diese Datentypen in Neuentwicklung   arbeiten und planen, Anwendungen zu ändern   die sie derzeit benutzen. Benutzen   nvarchar (max), varchar (max) und   varbinary (max) stattdessen.

Sie müssen verwenden TEXTPTR (Transact-SQL) um die Textdaten abzurufen.

Siehe auch diesen Artikel auf Behandeln des Textdatentyps.


2
2018-05-03 17:21



Es klingt, als ob der Xml nicht gut geformt sein könnte. Wenn dies der Fall ist, können Sie es nicht als Xml-Datei darstellen, und Sie haben nur eingeschränkte Möglichkeiten, wie viel Text Sie in Management Studio zurückgeben können. Sie könnten den Text jedoch in kleinere Abschnitte aufteilen:

With Tally As
    (
        Select ROW_NUMBER() OVER ( ORDER BY s1.object_id ) - 1 As Num
        From sys.sysobjects As s1
            Cross Join sys.sysobjects As s2
    )
Select Substring(T1.textCol, T2.Num * 8000 + 1, 8000)
From Table As T1
    Cross Join Tally As T2
Where T2.Num <= Ceiling(Len(T1.textCol) / 8000)
Order By T2.Num

Sie müssten sie dann manuell erneut kombinieren.

BEARBEITEN

Es klingt, als gäbe es einige Charaktere in der text Daten, die der Xml-Parser nicht mag. Sie könnten versuchen, diese Werte in Entitäten umzuwandeln und dann die Convert(xml, data) Trick. So etwas wie:

Update Table
Set Data = Replace(Cast(Data As varchar(max)),'<','&lt;')

(Ich musste auf varchar (max) umwandeln, weil die Ersetzungsfunktion nicht funktioniert text Säulen. Es sollte keinen Grund geben, warum Sie diese nicht konvertieren könnten text Spalten zu varchar(max).)


2
2018-05-03 17:20



Du hast kein Glück, denke ich. Das Problem ist kein SQL-Level-Problem, wie alle anderen Antworten zu konzentrieren scheinen, sondern einfach eine der Benutzeroberfläche. Management Studio ist nicht als allgemeine / allgemeine Datenzugriffsschnittstelle gedacht. Es ist nicht Ihre Schnittstelle, sondern Ihr administrativer Bereich, und es hat schwerwiegende Einschränkungen beim Umgang mit binären Daten und großen Testdaten - weil Benutzer, die es innerhalb des angegebenen Nutzungsprofils verwenden, dieses Problem nicht haben.

Das Präsentieren großer Textdaten ist einfach nicht die geplante Verwendung.

Ihre einzige Wahl wäre eine Tabellenwertfunktion, die die Texteingabe übernimmt und Zeilen für jede Zeile schneidet, so dass Management Studio eine Liste von Zeilen und nicht eine einzelne Zeile erhält.


0
2018-05-03 17:32