Làm thế nào để bạn xem TẤT CẢ văn bản từ một ntext hoặc nvarchar (tối đa) trong SSMS?


191

Làm cách nào để bạn xem TẤT CẢ văn bản từ NTEXT hoặc NVARCHAR (tối đa) trong SQL Server Management Studio? Theo mặc định, nó dường như chỉ trả về vài trăm ký tự đầu tiên (255?) Nhưng đôi khi tôi chỉ muốn một cách nhanh chóng để xem toàn bộ trường mà không phải viết chương trình để thực hiện. Ngay cả SSMS 2012 vẫn có vấn đề này :(


Câu trả lời:


91

Tùy chọn (Kết quả truy vấn / Máy chủ SQL / Kết quả vào trang lưới)

Để thay đổi các tùy chọn cho các truy vấn hiện tại, bấm Tùy chọn truy vấn trên menu Truy vấn hoặc bấm chuột phải vào cửa sổ Truy vấn SQL Server và chọn Tùy chọn truy vấn.

...

Các ký tự tối đa được truy xuất
Nhập một số từ 1 đến 65535 để chỉ định số lượng ký tự tối đa sẽ được hiển thị trong mỗi ô.

Tối đa là, như bạn thấy, 64k. Mặc định là nhỏ hơn nhiều.

Kết quả BTW thành văn bản thậm chí còn hạn chế hơn nữa:

Số lượng ký tự tối đa được hiển thị trong mỗi cột
Giá trị này mặc định là 256. Tăng giá trị này để hiển thị các tập kết quả lớn hơn mà không cần cắt bớt. Giá trị tối đa là 8.192.


1
Như Remus đã viết trong câu trả lời của mình, có những hạn chế, vì kích thước lưu trữ tối đa cho loại dữ liệu trong cột được xác định bằng MAX là 2 GB nên phải có một số hạn chế vì sẽ rất khó hiển thị tất cả dữ liệu đó trong SSMS.
Ivan G

13
@IvanG - Không hẳn. Nó chỉ có thể được siêu liên kết theo cách tương tự như XML và nhấp vào nó sẽ mở nó trong một cửa sổ mới. Công việc xung quanh tôi thường sử dụng là chuyển nó sang XML như ở đây . Dữ liệu XML có thể được đặt để cho phép độ dài không giới hạn.
Martin Smith

@MartinSmith Thật thú vị, vì vậy có thể khiến SSMS hiển thị lượng dữ liệu lớn như vậy ...
Ivan G

11
Chỉ hoạt động nếu số lượng ký tự <65535, ngắn hơn mức tối đa của ntext.
Polyfun

1
@IvanG thậm chí 'Kết quả cho tệp' phải chịu giới hạn này.
Iain

216

Tôi đã có thể lấy toàn bộ văn bản (99.208 ký tự) từ cột NVARCHAR (MAX) bằng cách chọn (Kết quả vào lưới) chỉ sau đó nhấp chuột phải vào đó và sau đó lưu kết quả dưới dạng tệp CSV. Để xem kết quả, hãy mở tệp CSV bằng trình soạn thảo văn bản (KHÔNG phải Excel). Thật thú vị, khi tôi cố chạy cùng một truy vấn, nhưng kích hoạt Kết quả thành Tệp, đầu ra bị cắt ngắn bằng cách sử dụng giới hạn Kết quả thành Văn bản.

Cách giải quyết mà @MartinSmith mô tả như một nhận xét cho câu trả lời được chấp nhận (hiện tại) không hoạt động đối với tôi (đã gặp lỗi khi cố gắng xem kết quả XML đầy đủ phàn nàn về "Ký tự '[', giá trị thập lục phân 0x5B, không thể được bao gồm trong một cái tên ").


17
Nhấp chuột phải, lưu dưới dạng, vào CSV làm việc cho tôi như một cơ duyên để có được giá trị văn bản lớn từ trường NTEXT.
David Alpert

3
@ajeh: bạn đang sử dụng phiên bản SSMS 2012 nào? Tôi vừa thử nó (theo các bước chính xác giống như tôi đã mô tả trong câu trả lời của mình) với SSMS 2012 của tôi (phiên bản 11.0.5343.0) và nó hoạt động
Eric

8
Nhưng không mở nó trong Excel, nhập CSV sẽ cắt dữ liệu lại. :)
Johncl

1
Cảm ơn, điều này cho phép tôi xuất 7 MB dữ liệu văn bản từ trường varchar (tối đa) bằng SSMS 2012.
Brian Hasden

2
Lưu dưới dạng văn bản được phân định bằng tab hoạt động tốt hơn. Định dạng csv nhân đôi tất cả các trích dẫn trong văn bản.
davidthegrey

138

Thủ thuật nhanh-

SELECT CAST('<A><![CDATA[' + CAST(LogInfo as nvarchar(max)) + ']]></A>' AS xml)
FROM Logs
WHERE IDLog = 904862629

6
Điều này hoạt động hoàn hảo (không có phần CDATA) khi nội dung của cột thực sự là XML
axk

2
Điều này cũng làm việc cho tôi, tôi có dữ liệu json mà tôi cần để thoát khỏi ms sql.
Dev_Corps

Ngoài ra, nội dung là XML thoát. Khi bạn lấy văn bản ra, bạn nên hủy bỏ nó bằng cách sử dụng một công cụ như freeformatter.com.
harsimranb

Điều này làm việc cho tôi: `` `DECLARE @g địa lý; ... chọn Truyền (@ g.ToString () là xml); `` `
Sergei Zinovyev

1
Điều này làm việc với tôi với SSMS v18 để xem chuỗi json 250kb bị cắt bởi các giải pháp khác. Thêm vào đó tôi thích nó vì nó cung cấp cho bạn một liên kết đến một trình xem văn bản. +!
Roberto

54

Tôi đã viết một bổ trợ cho SSMS và vấn đề này được khắc phục ở đó. Bạn có thể sử dụng một trong 2 cách:

bạn có thể sử dụng "Sao chép ô hiện tại 1: 1" để sao chép dữ liệu ô gốc vào khay nhớ tạm:

http://www.ssmsboost.com/Features/ssms-add-in-copy-results-grid-cell-contents-line-with-breaksSao chép nội dung ô gốc

Hoặc, thay vào đó, bạn có thể mở nội dung ô trong trình soạn thảo văn bản bên ngoài (notepad ++ hoặc notepad) bằng tính năng "Trình hiển thị tế bào": http://www.ssmsboost.com/Features/ssms-add-in-results-grid-visualulators

(tính năng cho phép mở nội dung của trường trong bất kỳ ứng dụng bên ngoài nào, vì vậy nếu bạn biết đó là văn bản - bạn sử dụng trình soạn thảo văn bản để mở. Nếu nội dung là dữ liệu nhị phân có hình ảnh - bạn chọn xem dưới dạng hình ảnh. ):Trực quan hóa kết quả lưới SSMS


2
Trông giống như một phần mở rộng thực sự hữu ích, nhưng tôi không thể chấp nhận nó như một câu trả lời vì nó yêu cầu một sản phẩm thương mại (hoặc dùng thử). Cảm ơn mặc dù!
NickG

4
+1 Tiện ích mở rộng miễn phí đẹp hoạt động hoàn hảo ... Cảm ơn!
reSPAWNed

2
Cảm ơn, điều này làm chính xác những gì tôi muốn.
Derreck Dean

9
Thật không may, kể từ ngày 4 tháng 9 năm 2017, SSMS Boost không còn miễn phí (ngoại trừ bản dùng thử 30 ngày cho mỗi phiên bản mới được phát hành)
csrowell

4
Đây hiện là một sản phẩm thương mại, giấy phép miễn phí không bao gồm bất kỳ tính năng nào được đề cập, chúng bị vô hiệu hóa và bạn có một cửa sổ bật lên để mua phiên bản PRO. Câu trả lời chỉ là một chương trình khuyến mãi cho phần mềm của anh ấy.
metabuddy

3

Trả lại dữ liệu dưới dạng XML

SELECT CONVERT(XML, [Data]) AS [Value]
FROM [dbo].[FormData]
WHERE [UID] LIKE '{my-uid}'

Đảm bảo bạn đặt giới hạn hợp lý trong cửa sổ tùy chọn SSMS, tùy thuộc vào kết quả mà bạn mong đợi. nhập mô tả hình ảnh ở đây

Điều này sẽ hoạt động nếu văn bản bạn trả về không chứa các ký tự chưa được mã hóa như &thay vào &amp;đó sẽ khiến chuyển đổi XML không thành công.

Trả lại dữ liệu bằng PowerShell

Để làm điều này, bạn sẽ cần mô-đun PowerShell SQL Server được cài đặt trên máy mà bạn sẽ chạy lệnh.

Nếu bạn đã thiết lập xong, hãy định cấu hình và chạy tập lệnh sau:

Invoke-Sqlcmd -Query "SELECT [Data] FROM [dbo].[FormData] WHERE [UID] LIKE '{my-uid}'" -ServerInstance "database-server-name" -Database "database-name" -Username "user" -Password "password" -MaxCharLength 10000000 | Out-File -filePath "C:\db_data.txt"

Hãy chắc chắn rằng bạn đặt -MaxCharLengththam số thành một giá trị phù hợp với nhu cầu của bạn.


1

Phương án 1 : Nhấp chuột phải để sao chép ô và Dán vào Trình chỉnh sửa văn bản (hy vọng có hỗ trợ utf-8)

Phương án 2 : Nhấp chuột phải và xuất sang Tệp CSV

Phương án 3 : Sử dụng chức năng SUBSTRING để trực quan hóa các phần của cột. Thí dụ:

CHỌN SUBSTRING (fileXml, 2200,200) TỪ mytable WHERE id = 123456


0

Nếu bạn chỉ phải xem nó, tôi đã sử dụng điều này:

print cast(dbo.f_functiondeliveringbigformattedtext(seed) as text)

Kết quả cuối cùng là tôi nhận được các nguồn cấp dữ liệu và tất cả nội dung trong cửa sổ tin nhắn của SMSS. Tất nhiên, nó chỉ cho phép một ô duy nhất - nếu bạn muốn thực hiện một ô duy nhất từ ​​một số hàng, bạn có thể làm điều này:

declare @T varchar(max)=''
select @T=@T
       + isnull(dbo.f_functiondeliveringbigformattedtext(x.a),'NOTHINGFOUND!')
       + replicate(char(13),4)
from x -- table containing multiple rows and a value in column a
print @T

Tôi sử dụng điều này để xác nhận các chuỗi JSON được tạo bởi mã SQL. Quá khó để đọc khác!


-1

Cách dễ nhất để nhanh chóng xem cột varchar / văn bản lớn:

declare @t varchar(max)

select @t = long_column from table

print @t

11
Nhưng văn bản vẫn bị cắt ngắn :-(
Rasmus
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.