2012-06-14 4 views
6

Ok Ich verwende SQL Server 2008 und habe ein Tabellenfeld vom Typ VARCHAR(MAX). Problem ist, dass beim Speichern von Informationen mit Hibernate der Inhalt von VARCHAR(MAX) Feld abgeschnitten wird. Ich sehe keine Fehlermeldungen auf dem Anwendungsserver oder dem Datenbankserver.SQL Server-Feld wird abgeschnitten

Der Inhalt dieses Feldes ist nur eine einfache Textdatei. Die Größe dieser Textdatei beträgt 383 KB.

Dies ist, was ich bisher getan, um dieses Problem zu beheben:

  1. das Datenbankfeld Geändert von VARCHAR(MAX) Text und gleiches Problem auftritt.

  2. den SQL Server Profiler Gebrauchte und ich bemerkte, dass der vollständige Text Inhalt vom Datenbankserver empfangen wird
    ist, aber aus irgendeinem Grund der Profiler friert ein, wenn versucht, die SQL mit dem Abschneiden Problem anzuzeigen. Wie ich schon sagte, bevor es einfriert, habe ich
    bemerkt, dass der volle Textdateiinhalt (383KB) empfangen wird, so scheint es , dass es das Datenbankproblem sein könnte.

Hat jemand dieses Problem vor? Irgendwelche Ideen, was diese Kürzung verursacht?

HINWEIS: Ich möchte nur erwähnen, dass ich nur in SQL Studio gehe und nur den TEXT-Feldinhalt kopiere und ihn in Textpad einfüge. So habe ich gemerkt, dass es abgeschnitten wird.

Vielen Dank im Voraus.

+1

Ein Vorschlag verwenden, die nichts mit meiner Antwort zu tun hat: stop Profiler. Verwenden Sie stattdessen eine serverseitige Ablaufverfolgung. –

+0

@AaronBertrand Können Sie bitte erklären, warum Sie gegen Profiler raten? – Apostrofix

+1

@Apostrofix Weil Profiler Ihren Server in die Knie zwingen kann. So kann eine Trace und Extended Events durchgeführt werden, aber es ist viel einfacher mit Profiler zu tun. Von [diesem Artikel] (http://sqlperformance.com/2012/10/sql-trace/observer-overhead-trace-extended-events): 'SQL Server Profiler ist ein Tool, das auf ausgelasteten Produktionsservern wie angezeigt vermieden werden soll durch die Verzehnfachung der Dauer und erhebliche Reduzierung des Durchsatzes für die Wiedergabe. –

Antwort

17

Ihr Problem ist, dass Sie glauben, dass Management Studio Ihnen alle Daten präsentieren wird. Es tut es nicht. Gehen Sie zu Extras> Optionen> Abfrageergebnisse> SQL Server. Wenn Sie Results to Grid verwenden, ändern Sie "Maximum Characters Retrieved" für "Non XML data" (beachten Sie, dass Results to Grid jeden CR/LF-Wert löscht). Wenn Sie Ergebnisse für Text verwenden, ändern Sie "Maximale Anzahl der in den einzelnen Spalten angezeigten Zeichen".

enter image description here

Sie könnten versucht sein, mehr zu geben, aber das Maximum, das Sie in Management Studio zurückkehren kann, ist:

65535 for Results to Grid 
8192 for Results to Text 

Wenn Sie wirklich, alle Daten im Management Studio sehen wollen, können Sie Versuchen Sie es in XML zu konvertieren, aber das hat auch Probleme. Erster Satz Um Ergebnisse Grid> XML-Daten zu 5 MB oder unbegrenzt, dann tun:

SELECT CONVERT(XML, column) FROM dbo.table WHERE... 

Nun wird dies ein Gitter Ergebnis führt, wo der Link tatsächlich anklickbar ist. Dies öffnet ein neues Editorfenster (es wird kein Abfragefenster sein, also keine Ausführungsschaltflächen, IntelliSense, usw.) mit Ihren Daten, die in XML konvertiert werden. Dies bedeutet, dass es > durch > usw. ersetzt.Hier ist ein kurzes Beispiel:

SELECT CONVERT(XML, 'bob > sally'); 

Ergebnis:

enter image description here

Wenn Sie auf das Raster klicken, erhalten Sie das neue Fenster:

enter image description here

(Es tut Art IntelliSense, validieren XML-Format, weshalb Sie die Squigglies sehen.)

ZURÜCK AN DER RANCH

Wenn Sie wollen einfach nur Plausibilitätsprüfung und wollen nicht wirklich alle 383K an anderer Stelle kopieren, dann nicht! Nur mit Check:

SELECT DATALENGTH(column) FROM dbo.table WHERE... 

Dies soll Ihnen zeigen, dass Ihre Daten von der Datenbank erfasst wurde, und das Problem ist, das Werkzeug und Ihre Methode der Verifikation.

(Ich habe a tip about this here da geschrieben.)

+0

Ja, Sie haben Recht. Ich hatte die Standardergebnisse zu Grid. Ja, das habe ich gemerkt, nachdem ich ein Dummy-Programm schreiben musste, um aus der Datenbank zu lesen und dieses Feld in eine Datei zu schreiben. Vielen Dank, zum ersten Mal bin ich auf dieses Problem gestoßen. – Marquinio

+2

'SELECT CONVERT (XML, 'bob & sally')' scheitert mit 'XML Parsing: Zeile 1, Zeichen 6, ungültiger Name Zeichen '. Sie könnten 'SELECT 'bob & sally' FOR XML PATH ('')' verwenden, aber das gibt 'bob & sally'. Ich bevorzuge 'SELECT' bob & sally 'AS [Verarbeitungsanweisung (x)] FOR XML PATH (' ') ', um die Berechtigung zu vermeiden. –

+0

@Martin guter Punkt, wenn ich XML auf diese Weise verwenden, ist es in der Regel eine Abkürzung für das Verschieben von viel grundlegenden Strings in den oberen Bereich. –

1

versuchen SELECT * FROM dbo.table for XML PATH