2008-10-20 32 views
5

Tôi cần xuất nội dung của trường văn bản bằng Trình phân tích truy vấn MS. Tôi đã cố gắng này:Cách đơn giản nhất để in ra nội dung của trường văn bản trong SQL Server

select top 1 text from myTable 

(nơi văn bản là một text trường)

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

Một bản in đầu tiên chỉ 2000 hay chừng ấy ký tự đầu tiên và thứ hai chỉ in đầu tiên 8000 ký tự. Có cách nào để có được tất cả các văn bản?

Ghi chú:

  • phải làm việc với SQL Server 7

Trả lời

8

Tôi không nghĩ rằng bạn có thể sử dụng varchar (MAX) trong MSSQL7, vì vậy đây là cái gì đó sẽ cung cấp cho bạn tất cả các dữ liệu (lưu ý, điều tôi hiểu là bạn chỉ muốn xem trực quan dữ liệu và bạn sẽ không đặt nó vào biến hoặc trả lại).

Vì vậy, điều này sẽ in ra toàn bộ chuỗi, do đó bạn trực quan có thể nhìn thấy những gì trong lĩnh vực này:

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

tôi đã không sử dụng Query Analyzer trong một thời gian, tuy nhiên bạn có thể điều chỉnh số lượng ký tự tối đa được hiển thị trong cửa sổ kết quả trong cửa sổ Tùy chọn. Xem tài liệu MSDN.

0

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

Sử dụng proc được lưu trữ này. Các chỉ xuống bên là bạn sẽ có được một đường bẻ gãy mọi 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*/ 

này ban đầu được đăng tải trên SQLServerCentral.com tại http://www.sqlservercentral.com/scripts/Print/63240/

Các vấn đề liên quan