it-swarm.com.de

varchar (MAX) -Text wird abgeschnitten, während mehr als 8000 Zeichen in einer Prozedur enthalten sind

Ich habe eine Prozedur, in der ich eine Variable mit dem Datentyp varchar (MAX) deklariert habe.

declare @str varchar(MAX);

set @str='select * from Table1...'

print (@str);
exec (@str);

wenn der in @str geschriebene Text jedoch mehr als 8000 Zeichen (d. h. 8193 Zeichen) überschreitet, wird die Zeichenfolge abgeschnitten und nur 8000 Zeichen gedruckt. Die Ausführung führt zu Fehlern außerhalb des Kurses.

Ich habe nach einiger Suche 2 Lösungen ausprobiert, aber es funktioniert nicht.

1) Ich habe versucht, 2 Variablen des gleichen Typs "varchar (MAX)" zu verwenden und sie zum Zeitpunkt der Ausführung zu verknüpfen, aber es funktioniert nicht.

2) Ich habe versucht, beide Variablen "erneut in varchar (MAX)" umzuwandeln, bevor ich sie zusammenfasste, und sie dann auszuführen, aber das funktioniert auch nicht.

5
Priyank Pahuja

SSMS kann standardmäßig keinen Varchar mit mehr als 8000 Zeichen anzeigen.

Es kann jedoch einen varchar (max) -Wert von bis zu 2 GB speichern .

Sie können eine Schleife einrichten und "Chunks" der @str - Daten mit einer Chunk-Größe von 8.000 Zeichen anzeigen.

Diese Antwort zeigt Ihnen, wie Sie die tatsächliche Länge des Werts @str Im Speicher bestätigen.

Und dieser MSDN-Artikel beschreibt die Ausführung. Bestimmtes:

In früheren Versionen von SQL Server sind Zeichenfolgen auf 8.000 Byte begrenzt. Dies erfordert die Verkettung großer Zeichenfolgen für die dynamische Ausführung. In SQL Server 2005 können die Datentypen varchar (max) und nvarchar (max) angegeben werden, mit denen Zeichenfolgen bis zu 2 Gigabyte Daten enthalten können.

Dies bedeutet, dass der Fehler, den Sie erhalten, etwas anderes ist und nicht das Ergebnis einer Kürzungsoperation für Ihren Wert @str.

9
CaM