Самый простой способ распечатать содержимое текстового поля в SQL Server - PullRequest
5 голосов
/ 21 октября 2008

Мне нужно вывести содержимое текстового поля с помощью MS Query Analyzer. Я пробовал это:

select top 1 text from myTable

(где текст является полем text)

и

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

Первый печатает только первые 2000 или около того символов, а второй печатает только первые 8000 символов. Есть ли способ получить весь текст?

Примечания:

  • должен работать с SQL Server 7

Ответы [ 3 ]

9 голосов
/ 21 октября 2008

Я не думаю, что вы можете использовать varchar (MAX) в MSSQL7, так что вот что даст вам все данные (обратите внимание, что я понимаю, вы просто хотите визуально увидеть данные, и вы не ' положить его в переменную или вернуть).

Итак, это распечатает всю строку, чтобы вы могли визуально увидеть, что находится в поле:

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 голос
/ 21 октября 2008

Я давно не пользовался Query Analyzer, однако вы можете настроить максимальное количество символов, отображаемых в окне результатов в окне параметров. См. Документацию MSDN .

0 голосов
/ 20 октября 2011

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

Используйте этот сохраненный процесс. Единственным недостатком является то, что вы получаете разрыв строки через каждые 8000 символов: (

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, @CurrentEnd+@offset, 1073741822)

END /*End While loop*/

Первоначально он был размещен на SQLServerCentral.com по адресу http://www.sqlservercentral.com/scripts/Print/63240/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...