2008-10-20 13 views
5

Potrzebuję wyprowadzić zawartość pola tekstowego za pomocą MS Query Analyzer. Próbowałem to:Najprostszy sposób wydrukowania zawartości pola tekstowego w SQL Server

select top 1 text from myTable 

(gdzie tekst jest text field)

i

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

pierwszy drukuje tylko pierwsze 2000 lub tak znaków, a drugi tylko drukuje pierwszy 8000 znaków. Czy istnieje sposób na uzyskanie całego tekstu?

Uwagi:

  • musi pracować z SQL Server 7

Odpowiedz

8

Nie sądzę, można użyć varchar (max) w MSSQL7, więc tutaj jest coś, co daje wszystkie dane (zauważ, że to, co rozumiem, to po prostu chcesz zobaczyć dane, a nie wstawisz ich do zmiennej lub zwrócisz).

Tak, będzie to wydrukować cały ciąg, dzięki czemu można wizualnie zobaczyć, co znajduje się w polu:

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

Nie używałem Query Analyzer na jakiś czas, jednak można dostosować maksymalną ilość znaków wyświetlane w oknie wyników w oknie Opcje. Zobacz dokumentację MSDN.

0

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

Służy przechowywane proc. Jedyną wadą jest to, masz to linia złamać co 8000 charachters :(

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*/ 

ten został opublikowany pierwotnie na SQLServerCentral.com na http://www.sqlservercentral.com/scripts/Print/63240/

Powiązane problemy