2008-10-20 2 views
5

Ich brauche den Inhalt eines Textfeldes mit MS Query Analyzer zur Ausgabe. Ich habe dies versucht:einfachste Weg, um den Inhalt eines Textfeldes in SQL Server auszudrucken

select top 1 text from myTable 

(wo Text ist ein text Feld)

und

DECLARE @data VarChar(8000) 
select top 1 @data = text from myTable 
PRINT @data 

Die erste druckt nur die ersten 2000 oder so Zeichen und die zweite druckt nur die erste 8000 Zeichen. Gibt es eine Möglichkeit, den gesamten Text zu erhalten?

Hinweise:

  • muss mit SQL Server arbeiten 7

Antwort

8

Ich glaube nicht, Sie varchar (MAX) in MSSQL7 verwenden können, also hier ist etwas, das Sie alle Daten geben (Beachte, ich verstehe, dass du nur die Daten visuell sehen willst, und du wirst sie nicht in eine Variable schreiben oder zurückgeben.

So wird diese von der gesamten String drucken, so können Sie visuell sehen, was auf dem Gebiet ist:

DECLARE @limit as int, 
     @charLen as int, 
     @current as int, 
     @chars as varchar(8000) 

SET @limit = 8000 

SELECT TOP 1 @charLen = LEN(text) 
FROM myTable 

SET @current = 1 

WHILE @current < @charLen 
BEGIN 
    SELECT TOP 1 @chars = SUBSTRING(text,@current,@limit) 
    FROM myTable 
    PRINT @chars 

    SET @current = @current + @limit 
END 
1

Ich habe nicht Query Analyzer in eine Zeit lang verwendet, jedoch können Sie die maximale Anzahl der Zeichen einstellen im Ergebnisfenster im Fenster Optionen angezeigt. Siehe die MSDN Dokumentation.

0

http://shortfastcode.blogspot.com/2011/10/getting-around-sql-server-print-8000.html

Mit dieser gespeicherten proc. Der einzige Nachteil ist, dass Sie eine Zeile alle 8000 charachters brechen bekommen :(

CREATE PROCEDURE [dbo].[LongPrint] 
     @String NVARCHAR(MAX) 

AS 

/* 
Example: 

exec LongPrint @string = 
'This String 
Exists to test 
the system.' 

*/ 

/* This procedure is designed to overcome the limitation 
in the SQL print command that causes it to truncate strings 
longer than 8000 characters (4000 for nvarchar). 

It will print the text passed to it in substrings smaller than 4000 
characters. If there are carriage returns (CRs) or new lines (NLs in the text), 
it will break up the substrings at the carriage returns and the 
printed version will exactly reflect the string passed. 

If there are insufficient line breaks in the text, it will 
print it out in blocks of 4000 characters with an extra carriage 
return at that point. 

If it is passed a null value, it will do virtually nothing. 

NOTE: This is substantially slower than a simple print, so should only be used 
when actually needed. 
*/ 

DECLARE 
       @CurrentEnd BIGINT, /* track the length of the next substring */ 
       @offset tinyint /*tracks the amount of offset needed */ 

set @string = replace( replace(@string, char(13) + char(10), char(10)) , char(13), char(10)) 

WHILE LEN(@String) > 1 
BEGIN 

IF CHARINDEX(CHAR(10), @String) between 1 AND 4000 
    BEGIN 

SET @CurrentEnd = CHARINDEX(char(10), @String) -1 
      set @offset = 2 
    END 
    ELSE 
    BEGIN 
      SET @CurrentEnd = 4000 
      set @offset = 1 
    END 

PRINT SUBSTRING(@String, 1, @CurrentEnd) 

set @string = SUBSTRING(@String, @[email protected], 1073741822) 

END /*End While loop*/ 

Das ursprünglich auf SQLServerCentral.com bei http://www.sqlservercentral.com/scripts/Print/63240/ gebucht wurde