Bagaimana Anda melihat SEMUA teks dari ntext atau nvarchar (maks) di SSMS?

191

Bagaimana Anda melihat SEMUA teks dari NTEXT atau NVARCHAR (maks) di SQL Server Management Studio? Secara default, sepertinya hanya mengembalikan beberapa ratus karakter pertama (255?) Tetapi kadang-kadang saya hanya ingin cara cepat melihat seluruh bidang, tanpa harus menulis program untuk melakukannya. Bahkan SSMS 2012 masih memiliki masalah ini :(

NickG
sumber
1
kemungkinan duplikat tentang cara mendapatkan hasil lengkap dari SSMS
Martin Smith

Jawaban:

91

Opsi (Hasil Permintaan / SQL Server / Hasil ke Halaman Kisi)

Untuk mengubah opsi untuk kueri saat ini, klik Opsi Kueri pada menu Kueri, atau klik kanan di jendela SQL Server Query dan pilih Opsi Kueri.

...

Karakter Maksimum Diperoleh
Masukkan angka dari 1 hingga 65535 untuk menentukan jumlah karakter maksimum yang akan ditampilkan di setiap sel.

Maksimum, seperti yang Anda lihat, 64k. Standarnya jauh lebih kecil.

BTW Results to Text memiliki batasan yang lebih drastis:

Jumlah karakter maksimum yang ditampilkan di setiap kolom
Nilai ini default ke 256. Tingkatkan nilai ini untuk menampilkan set hasil yang lebih besar tanpa pemotongan. Nilai maksimum adalah 8.192.

Remus Rusanu
sumber
1
Seperti Remus menulis dalam jawabannya, ada batasan, karena ukuran penyimpanan maksimum untuk tipe data dalam kolom yang didefinisikan dengan MAX adalah 2 GB sehingga harus ada batasan karena akan merepotkan untuk menampilkan semua data itu di SSMS.
Ivan G
13
@VanG - Tidak juga. Itu bisa saja hyperlink dengan cara yang sama seperti XML dan mengkliknya akan membukanya di jendela baru. Pekerjaan di sekitar saya biasanya menggunakan adalah untuk melemparkannya ke XML seperti di sini . Data XML dapat diatur untuk memungkinkan panjang tak terbatas.
Martin Smith
@MartinSmith Menarik, jadi dimungkinkan untuk membuat SSMS menampilkan data dalam jumlah besar ...
Ivan G
11
Hanya berfungsi jika jumlah karakter <65535, yang jauh dari maksimum ntext.
Polyfun
1
@IvanG bahkan 'Hasil ke File' menderita dari batas ini.
Iain
216

Saya bisa mendapatkan teks lengkap (99.208 karakter) dari kolom NVARCHAR (MAX) dengan memilih (Hasil Ke Jaringan) hanya kolom itu dan kemudian mengklik kanan padanya dan kemudian menyimpan hasilnya sebagai file CSV. Untuk melihat hasilnya, buka file CSV dengan editor teks (BUKAN Excel). Cukup lucu, ketika saya mencoba menjalankan kueri yang sama, tetapi memiliki Hasil untuk File diaktifkan, output dipotong menggunakan batas Hasil ke Teks.

Kerja-sekitar yang @MartinSmith dijelaskan sebagai komentar untuk jawaban yang diterima (saat ini) tidak bekerja untuk saya (mendapat kesalahan ketika mencoba untuk melihat hasil XML lengkap dengan mengeluh tentang "Karakter '[', nilai heksadesimal 0x5B, tidak bisa dimasukkan dalam nama ").

Eric
sumber
17
Klik kanan, simpan sebagai, agar CSV bekerja untuk saya seperti pesona untuk mendapatkan nilai teks besar dari bidang NTEXT.
David Alpert
3
@ajeh: versi SSMS 2012 apa yang Anda gunakan? Saya baru saja mengujinya (mengikuti langkah-langkah persis yang sama dengan yang saya jelaskan dalam jawaban saya) dengan SSMS 2012 saya (versi 11.0.5343.0) dan berhasil
Eric
8
Tapi jangan membukanya di Excel, impor CSV akan memotong data lagi. :)
Johncl
1
Terima kasih, ini memungkinkan saya untuk mengekspor 7MB data teks dari bidang varchar (maks) menggunakan SSMS 2012.
Brian Hasden
2
Menyimpan sebagai tab yang dibatasi teks berfungsi lebih baik. Format csv menggandakan semua kutipan dalam teks.
davidthegrey
138

Trik cepat-

SELECT CAST('<A><![CDATA[' + CAST(LogInfo as nvarchar(max)) + ']]></A>' AS xml)
FROM Logs
WHERE IDLog = 904862629
André Kops
sumber
6
Ini berfungsi dengan baik (tanpa bagian CDATA) ketika isi kolom sebenarnya adalah XML
axk
2
Ini bekerja untuk saya juga, saya punya data json yang saya butuhkan untuk keluar dari ms sql.
Dev_Corps
Juga, isinya XML lolos. Setelah mengeluarkan teks, Anda harus menghapusnya menggunakan alat seperti freeformatter.com.
harsimranb
Ini bekerja untuk saya: `` `DECLARE @g geography; ... pilih Cast (@ g.ToString () sebagai xml); `` `
Sergei Zinovyev
1
Ini bekerja untuk saya dengan SSMS v18 untuk melihat string json 250kb yang terpotong oleh solusi lain. Ditambah lagi, saya menyukainya karena memberi Anda tautan ke penampil teks. +!
Roberto
54

Saya telah menulis add-in untuk SSMS dan masalah ini diperbaiki di sana. Anda dapat menggunakan salah satu dari 2 cara:

Anda dapat menggunakan "Salin sel saat ini 1: 1" untuk menyalin data sel asli ke clipboard:

http://www.ssmsboost.com/Features/ssms-add-in-copy-result-grid-cell-contents-line-with-breaksSalin konten sel asli

Atau, sebagai alternatif, Anda dapat membuka konten sel di editor teks eksternal (notepad ++ atau notepad) menggunakan fitur "Visualisator sel": http://www.ssmsboost.com/Features/ssms-add-in-results-grid-visualizers

(fitur memungkinkan untuk membuka konten bidang dalam aplikasi eksternal apa pun, jadi jika Anda tahu itu adalah teks - Anda menggunakan editor teks untuk membukanya. Jika konten adalah data biner dengan gambar - Anda memilih tampilan sebagai gambar. Contoh di bawah ini menunjukkan membuka gambar. ):Visualisator grid Hasil SSMS

Andrei Rantsevich
sumber
2
Sepertinya ekstensi yang sangat berguna, tetapi saya tidak dapat menerimanya sebagai jawaban karena memerlukan produk komersial (atau percobaan). Terimakasih Meskipun!
NickG
4
+1 Ekstensi gratis bagus yang berfungsi dengan baik ... Terima kasih!
ditanggapi kembali
2
Terima kasih, ini tepat seperti yang saya inginkan.
Derreck Dean
9
Sayangnya, pada 4 September 2017, SSMS Boost tidak lagi gratis (kecuali untuk uji coba 30 hari untuk setiap versi baru yang dirilis)
csrowell
4
Ini sekarang merupakan produk komersial, lisensi gratis tidak mencakup salah satu fitur yang disebutkan, mereka dinonaktifkan dan Anda mendapatkan pop-up untuk membeli versi PRO. Jawabannya hanyalah promosi untuk perangkat lunaknya.
metabuddy
3

Kembalikan data sebagai XML

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

Pastikan Anda menetapkan batas yang wajar di jendela opsi SSMS, tergantung pada hasil yang Anda harapkan. masukkan deskripsi gambar di sini

Hal ini akan bekerja jika teks Anda kembali tidak mengandung karakter unencoded seperti &bukan &amp;yang akan menyebabkan konversi XML gagal.

Mengembalikan data menggunakan PowerShell

Untuk ini, Anda akan memerlukan modul PowerShell SQL Server diinstal pada mesin tempat Anda menjalankan perintah.

Jika Anda sudah siap, konfigurasikan dan jalankan skrip berikut:

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"

Pastikan Anda mengatur -MaxCharLengthparameter ke nilai yang sesuai dengan kebutuhan Anda.

dvlsc
sumber
1

Alternatif 1 : Klik Kanan untuk menyalin sel dan menempel ke Editor Teks (mudah-mudahan dengan dukungan utf-8)

Alternatif 2 : Klik kanan dan ekspor ke File CSV

Alternatif 3 : Gunakan fungsi SUBSTRING untuk memvisualisasikan bagian kolom. Contoh:

SELECT SUBSTRING (fileXml, 2200.200) DARI mytable WHERE id = 123456

Don G.
sumber
0

Jika Anda hanya perlu melihatnya, saya telah menggunakan ini:

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

Hasil akhirnya adalah saya mendapatkan umpan baris dan semua konten di jendela pesan SMS. Tentu saja, ini hanya memungkinkan satu sel - jika Anda ingin melakukan sel tunggal dari sejumlah baris, Anda bisa melakukan ini:

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

Saya menggunakan ini untuk memvalidasi string JSON yang dihasilkan oleh kode SQL. Terlalu sulit untuk dibaca!

CDenby
sumber
-1

Cara termudah untuk dengan cepat melihat kolom teks / varchar besar:

declare @t varchar(max)

select @t = long_column from table

print @t
Rafael Lenartowicz
sumber
11
Tapi teks masih terpotong :-(
Rasmus