2009-06-04 13 views
40

In SQL Server 2005 versuche ich eine VARCHAR (MAX) -Spalte abzufragen, die einige Zeilen mit Textdaten hat, die die 8192 überschreiten. In Management Studio habe ich unter Tools -> Optionen -> Abfrage Ergebnisse -> Ergebnisse zu Text -> Maximale Anzahl der Zeichen in jeder Spalte angezeigt = 8192, die ein Maximum ist. Dementsprechend scheint es, dass das Abschneiden dieser Zeilen nur aufgrund der durch die Textausgabe auferlegten Begrenzung erfolgt.SQL Server Abschneiden und 8192 Einschränkung

Das einzige, was ich sehe, um dies zu umgehen, ist eine SUBSTRING-Funktion zu verwenden, sagen die ersten 8000 Zeichen, dann die nächsten 8000 Zeichen usw. usw. Aber das ist hässlich und fehleranfällig.

Ich sollte erwähnen, dass SSIS und BCP sind keine Optionen für mich.

Hat jemand einen besseren Vorschlag? Vielen Dank!

+1

Sind Sie mit, wie die Ausgabe in Query Analyzer angezeigt wird? Wenn Sie es nur verwenden, um über Daten zu schauen, würde ich nicht zu sehr auf "fehleranfälligen" und "hässlichen" Code verzichten. Wenn Sie es für die Produktion verwenden, ist das ein ganz anderes Problem. –

+0

Tom: Ich schaue nicht nur auf Daten. Ich verwende die Abfrageausgabe, um neue gespeicherte Prozeduraufrufe für einen Remote-Server zu generieren, also muss das Ergebnis "perfekt" sein. –

+1

Aber warum SSMS verwenden, um die Abfrage auszuführen? Was passiert, wenn Sie die gleiche Abfrage von einem Programm ausführen? –

Antwort

57

Sie können die Daten in eine flache Datei exportieren, die abgeschnitten werden, nicht. Um dies zu tun:

  1. Rechtsklick auf die Datenbank
  2. Klicken Sie auf Aufgaben -> Daten exportieren
  3. Wählen Sie Ihre Datenquelle (Standardwerte sollte in Ordnung sein)
  4. Wählen Sie "Flat File Destination" für den Zieltyp.
  5. Wählen Sie einen Dateinamen für die Ausgabe.
  6. Auf der „Geben Sie Tabelle kopieren oder Query“, wählen Sie „eine Abfrage, um die Daten zu spezifizieren übertragen“
  7. Einfügen in Ihrer Anfrage

verbleibenden Schritte sollten selbsterklärend sein. Dadurch wird die Datei als Text ausgegeben und Sie können sie in Ihrem bevorzugten Texteditor öffnen.

+0

+1 für eine Lösung, die funktioniert, ohne ein benutzerdefiniertes Tool schreiben zu müssen. Ich musste XML-Daten exportieren, ohne die Formatierung (den Abstand) zu ändern, daher war der Export als XML keine Option. – mlhDev

+0

Dies sollte die akzeptierte Antwort sein. –

+0

Danke @Torre .. es rettete meinen Tag :) –

0

Die Kürzung erfolgt nur in Management Studio. Wenn Sie die Spalte in eine andere App ziehen, wird sie nicht abgeschnitten.

Es gibt keine Möglichkeit, mit Query Analyzer mit SQL Server 2005 zu kommunizieren. Meinst du Management Studio?

+0

Ich glaube, er meint Management Studio. Wenn Sie zu "Results to Grid" wechseln, zeigt es die maximale pro Spalte als 65535. Nicht sicher, ob das Sie näher bringt, klingt - wie Sie versuchen, in SQL-Code-gen? – GalacticCowboy

+0

Entschuldigung, ich meine Management Studio. –

0

Bei einer Wahl würde ich die Abfrage die Daten als "Für XML Auto" oder "Für XML Raw" oder "Für XML explizit" zurückgeben, auf diese Weise sind die Einschränkungen viel höher und Sie können viel mehr mit den Outpute tun Ergebnisse.

+0

Dies kürzt auch die Ausgabe ... –

+0

@Jaco - Aber Sie können das XML-Limit in SSMS konfigurieren, um dies zu vermeiden. Siehe meine Antwort. –

4

war meine Lösung ein bisschen round-about aber ich habe es (solange der Ausgang weniger als 65535 Zeichen ist) :

  1. In SQL Management Studio, stellen Sie den Grenzwert für das Netz Ergebnisse 65535 (Extras> Optionen> Abfrageergebnisse> SQL Server> Ergebnisse auf Grid> Non XML-Daten)
  2. Führen Sie die Abfrage, Ausgabe Raster
  3. die Ergebnisse der rechten Maustaste, wählen Sie "speichern Ergebnisse unter ..." und Speichern Sie die Ergebnisse in einer Datei
  4. die Datei in Notepad oder ähnliches Öffnen den Ausgang

UPDATE zu erhalten: Um zu zeigen, dass dies funktioniert, ist hier einige SQL, die ein einzelnen 100.000 Zeichenspalte auswählt. Wenn ich die Rasterausgabe in eine CSV-Datei speichere, sind alle 100.000 Zeichen ohne Kürzung vorhanden.

DECLARE @test nvarchar(MAX), @i int, @line nvarchar(100) 
SET @test = ''; SET @i = 100 
WHILE @i < 100000 
BEGIN 
    SET @test = @test + STUFF(REPLICATE('_', 98) + CHAR(13) + CHAR(10), 1, LEN(CAST(@i AS nvarchar)), CAST(@i AS nvarchar)) 
    SET @i = @i + 100 
END 
SELECT @test 

Hinweise:

  1. Es scheint keinen Unterschied zu machen, was die Zeichenlänge Einstellung ist, wie ich orignally gedacht.
  2. Ich verwende SQL 2008 R2 (sowohl den Server als auch Management Studio)
  3. Es scheint keinen Unterschied zu machen, wenn die lange Spalte in einer lokalen Variablen (wie in diesem Beispiel) gespeichert oder ausgewählt ist eine tatsächliche Tabelle
+1

Dies funktioniert nicht. Datei hat noch abgeschnittene Daten. – SFun28

+0

Es tut uns leid zu hören, dass es nicht für Sie funktioniert hat. Ich habe Code hinzugefügt, der zeigt, wie ich getestet habe, dass es funktioniert, und einige Hinweise zu den Bedingungen, unter denen ich weiß, dass es funktioniert. –

+1

Funktioniert auch nicht für mich. MS SQL Management Studio 2008 R2. –

0

ich in der Regel XML verwende großen Debug-String als Ausgabe zu erhalten (Prüfkabelbaum von Luke verwenden):

declare @test nvarchar(max), @i int, @line nvarchar(100) 
    set @test = ''; set @i = 100 
    while @i < 100000 
    begin 
     set @test = @test + stuff(replicate('_', 98) + char(13) + char(10), 1, len(cast(@i as nvarchar)), cast(@i as nvarchar)) 
     set @i = @i + 100 
    end 
    -- ctrl+d for "results to grid" then click the xml output 
    --select cast('<root>' + @test + '</root>' as xml) 

-- revised 
select @test for xml path(''), type; 
+0

Sprengt auf, wenn '@test'' 2 <3' enthält –

+0

Guter Punkt. Sie können XML-Pfad sie ersetzen lassen ... nicht sicher, dass Sie danach sind. Zumindest kein Aufblasen :) Überprüfen Sie die Revision bitte. –

+0

Kein Sprengen, aber es ändert das Ergebnis! –

25

ich benutze XML auch aber a slightly different method, die die meisten Probleme mit XML umgehen Berechtigung.

Stellen Sie sicher, dass das Limit "XML-Daten" in SSMS ausreichend hoch eingestellt ist!

Screenshot

+2

Offensichtlich die beste Lösung. –

+0

Gibt es eine Möglichkeit, die nicht-XML-Daten als unbegrenzt und Verzicht auf das Limit angezeigt zu haben? Ich kann sehen, dass die untere Grenze ist 30 und höher ist 65535. – pordi

+0

@BabekoofCoder - leider nicht. Daher muss casting non xml als XML-Problemumgehung verwendet werden. –

3

Ich lief darin, XML zu exportieren. Dies ist die Lösung, die ich verwendete:

Wählen Sie die Ergebnis zu Rasteroption, klicken Sie mit der rechten Maustaste auf den Link im Ergebnisbereich, wählen Sie Ergebnisse speichern unter, wählen Sie den Dateityp Alle Dateien, geben Sie der Datei einen Namen und klicken Sie auf Sparen. Alle XML-Daten werden korrekt in einer Datei gespeichert.

Ich benutze SSMS 10, und ich konnte Torres Lösung nicht funktionieren. Der Assistent Export hielt der Eingabespalt zu denken war ein Bild:

Der Datentyp für „Eingabespalt‚XML_F52E2B61-18A1-11d1-B105-00805F49916B‘(26)“ ist DT_IMAGE

+0

Ich hatte auch dieses 'DT_IMAGE'-Problem, aber ich habe es umgangen, indem ich einen anderen', Typ', einen äußeren 'select() als Spaltennamen um meine XML-generierende Anweisung hinzugefügt und das Kontrollkästchen Unicode im Export-Wizard aktiviert habe. – Nathan

0

In SSMS, wenn Sie Daten auswählen aus einer Reihe ist es auf eine kleine Anzahl von Zeichen beschränkt, aber wenn Sie Daten aus einer Zeile bearbeiten, wird der volle Wert angezeigt. Es ist vielleicht nicht immer da, aber wenn Sie ctrl-a, ctrl-c, dann in einem Editor vorbei, wird alles da sein.

0

Eine andere Problemumgehung, verwenden Sie HeidiSql für diese knifflige Abfragen. Es hat nicht die Grenzen in der Feldlänge.

2

Haben Sie diese einfache Lösung versucht? Nur 2 Klicks entfernt!

Im Abfragefenster

  1. Satz Abfrageoptionen auf „Grid Ergebnisse“, führen Sie Ihre Abfrage
  2. rechts auf dem Ergebnis Registerkarte klicken, an der Rasterecke Ergebnisse als alle Dateien speichern

Sie erhalten den gesamten Text, den Sie in der Datei sehen möchten !!! Ich kann 130.556 Zeichen für mein Ergebnis einer varchar (MAX) Feld sehen

Just Two Clicks away!

Verwandte Themen