2008-10-20 1372 views
5

Necesito dar salida al contenido de un campo de texto usando MS Query Analyzer. He intentado esto:Manera más sencilla de imprimir los contenidos de un campo de texto en SQL Server

select top 1 text from myTable 

(donde el texto es una text campo)

y

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

El primero se imprime sólo los primeros caracteres 2000 más o menos y el segundo sólo se imprime la primera 8000 caracteres. ¿Hay alguna forma de obtener todo el texto?

Notas:

  • debe trabajar con SQL Server 7

Respuesta

8

No creo que se puede utilizar varchar (max) en MSSQL7, por lo que aquí hay algo que le dará todos los datos (nota, lo que estoy entendiendo es que solo quieres ver visualmente los datos, y no vas a ponerlos en una variable o devolverlos).

Por lo tanto, esto va a imprimir toda la cadena para que pueda ver visualmente lo que está en el campo:

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

No he utilizado el analizador de consultas desde hace tiempo, sin embargo, se puede ajustar la cantidad máxima de caracteres se muestra en la ventana de resultados en la ventana Opciones. Consulte la documentación MSDN.

0

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

Utilice este procedimiento almacenado. El único inconveniente es que se consigue una línea de romper cada 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*/ 

Este fue publicada originalmente en SQLServerCentral.com en http://www.sqlservercentral.com/scripts/Print/63240/

Cuestiones relacionadas