SSMS'de bir ntext veya nvarchar (max) 'dan TÜM metinleri nasıl görüntülersiniz?


193

SQL Server Management Studio'da bir NTEXT veya NVARCHAR'dan (maks.) TÜM metinleri nasıl görüntülersiniz? Varsayılan olarak, sadece ilk birkaç yüz karakteri (255?) Döndürüyor gibi görünüyor, ancak bazen bunu yapmak için bir program yazmak zorunda kalmadan tüm alanı hızlı bir şekilde görüntülemek istiyorum. SSMS 2012'de bile hala bu sorun var :(


Yanıtlar:


91

Seçenekler (Sonuçları Sorgula / SQL Server / Izgara Sayfasına Sonuçlar)

Geçerli sorguların seçeneklerini değiştirmek için, Sorgu menüsünde Sorgu Seçenekleri'ni tıklatın veya SQL Server Sorgu penceresini sağ tıklatın ve Sorgu Seçenekleri'ni seçin.

...

Alınan Maksimum Karakter Sayısı
Her hücrede görüntülenecek maksimum karakter sayısını belirlemek için 1 ile 65535 arasında bir sayı girin.

Maksimum, gördüğünüz gibi 64k. Varsayılan değer çok daha küçüktür.

BTW Sonuçlarının Metne Daha da ciddi bir sınırlaması vardır:

Her sütunda görüntülenen maksimum karakter sayısı
Bu değer varsayılan olarak 256'dır. Kesintisiz daha büyük sonuç kümeleri görüntülemek için bu değeri artırın. Maksimum değer 8.192'dir.


1
Remus'un cevabında yazdığı gibi, sınırlamalar vardır, çünkü MAX ile tanımlanan sütundaki veri türü için maksimum depolama boyutu 2 GB'dir, bu nedenle bazı sınırlamalar olması gerekir, çünkü tüm bu verileri SSMS'de görüntülemek zahmetli olacaktır.
Ivan G

13
@IvanG - Pek değil. XML ile aynı şekilde köprülenebilir ve üzerine tıklandığında yeni bir pencerede açılır. Normalde kullandığım çalışma , burada olduğu gibi XML'e dökmektir . XML verileri sınırsız uzunluğa izin verecek şekilde ayarlanabilir.
Martin Smith

@MartinSmith İlginç, bu yüzden SSMS'nin bu kadar büyük miktarda veri görüntülemesini sağlamak mümkün ...
Ivan G

11
Yalnızca <65535 karakter sayısı, ntext maksimum değerinden çok daha kısa olduğunda çalışır.
Polyfun

1
@IvanG 'Dosyaya Sonuç' bile bu sınırdan muzdarip.
Iain

217

Tam metni (99,208 karakter) bir NVARCHAR (MAX) sütunundan (Şebekeye Sonuçlar) seçerek sadece bu sütunu seçip sağ tıklayıp sonucu bir CSV dosyası olarak kaydederek başardım. Sonucu görüntülemek için CSV dosyasını bir metin düzenleyicisiyle açın (Excel DEĞİL). Aynı sorguyu çalıştırmayı denediğimde, ancak Dosyaya Sonuçlar'ı etkinleştirdiğimde, Çıktı, Metin Sonuçları sınırı kullanılarak kesildi.

@MartinSmith'in (şu anda) kabul edilen yanıta bir yorum olarak açıklanan geçici çözüm benim için işe yaramadı ("['karakteri, onaltılık değer 0x5B, bir isme dahil edilebilir ").


17
CSV'ye sağ tıklayın, kaydedin, bir NTEXT alanından büyük bir metin değeri elde etmek için bir cazibe gibi çalıştı.
David Alpert

3
@ajeh: SSMS 2012'nin hangi sürümünü kullanıyorsunuz? SSMS 2012 (sürüm 11.0.5343.0) ile test ettim (cevabımda tarif ettiğim adımları aynen izledim) ve işe yarıyor
Eric

8
Ancak Excel'de açmayın, CSV içe aktarma işlemi verileri yeniden keser. :)
Johncl

1
Teşekkürler, bu SSMS 2012 kullanarak bir varchar (maks.) Alanından 7MB metin verileri dışa aktarmama izin verdi.
Brian Hasden

2
Sekmeyle ayrılmış metin olarak kaydetmek daha iyi sonuç verir. Csv biçimi metindeki tüm tırnak işaretlerini ikiye katlar.
davidthegrey

140

Hızlı numara

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

6
Sütunun içeriği aslında XML olduğunda bu mükemmel çalışır (CDATA kısmı olmadan)
axk

2
Bu da benim için çalıştı, ben ms sql almak için gereken json verileri vardı.
Dev_Corps

1
Ayrıca, içerik XML'den kaçmıştır. Metni çıkardıktan sonra, freeformatter.com gibi bir araç kullanarak unescape yapmalısınız.
harsimranb

Bu benim için çalıştı: `` DECLARE @g coğrafyası; ... Cast (@ g.ToString () öğesini xml olarak seçin); ``
Sergei Zinovyev

1
Bu, diğer çözümler tarafından kesilmiş 250kb json dizesini görüntülemek için SSMS v18 ile çalıştı. Ayrıca hoşuma gidiyor çünkü size bir metin görüntüleyiciye bağlantı veriyor. +!
Roberto

54

SSMS için bir eklenti yazdım ve bu sorun orada düzeltildi. 2 yoldan birini kullanabilirsiniz:

orijinal hücre verilerini panoya kopyalamak için "Mevcut hücre 1: 1'i kopyala" seçeneğini kullanabilirsiniz:

http://www.ssmsboost.com/Features/ssms-add-in-copy-results-grid-cell-contents-line-with-breaksOrijinal hücre içeriğini kopyalama

Alternatif olarak, "Hücre görüntüleyicileri" özelliğini kullanarak hücre içeriklerini harici metin düzenleyicisinde (not defteri ++ veya not defteri) açabilirsiniz: http://www.ssmsboost.com/Features/ssms-add-in-results-grid-visualizers

(özellik, herhangi bir harici uygulamada alan içeriğinin açılmasına izin verir, bu nedenle metin olduğunu biliyorsanız - açmak için metin düzenleyicisini kullanırsınız. İçerikler resim ile ikili veri ise - resim olarak görünümü seçersiniz. Aşağıdaki örnek resim açmayı gösterir ):SSMS Sonuçları ızgara görselleştiricileri


2
Gerçekten kullanışlı bir uzantı gibi görünüyor, ancak ticari bir ürün (veya deneme sürümü) gerektirdiği için bir cevap olarak kabul edemiyorum. Yine de teşekkürler!
NickG

4
+1 Mükemmel çalışan güzel ücretsiz uzantı ... Teşekkürler!
reSPAWNed

2
Teşekkürler, bu tam olarak istediğimi yapıyor.
Derreck Dean

9
Ne yazık ki, 4 Eylül 2017 itibariyle, SSMS Boost artık ücretsiz değil (yayınlanan her yeni sürüm için 30 günlük deneme hariç)
csrowell

4
Bu artık ticari bir üründür, ücretsiz lisans belirtilen özelliklerin hiçbirini kapsamaz, devre dışı bırakılır ve PRO sürümünü satın almak için bir açılır pencere alırsınız. Cevap sadece yazılımı için bir promosyon.
Ocak'ta

3

Verileri XML olarak döndür

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

Beklediğiniz sonuca bağlı olarak, SSMS seçenekleri penceresinde makul bir sınır belirlediğinizden emin olun. resim açıklamasını buraya girin

Geri döndürdüğünüz metin, &bunun yerine kodlanmamış karakterler içermiyorsa &amp;, XML dönüşümünün başarısız olmasına neden olur.

PowerShell kullanarak veri döndürme

Bunun için , komutu çalıştıracağınız makinede yüklü PowerShell SQL Server modülüne ihtiyacınız olacaktır .

Her şey hazırsa, aşağıdaki komut dosyasını yapılandırın ve çalıştırın:

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"

-MaxCharLengthParametreyi ihtiyaçlarınıza uygun bir değere ayarladığınızdan emin olun .


1

Alternatif 1 : Hücreyi kopyalamak ve Metin Düzenleyiciye Yapıştırmak için Sağ Tıklayın (umarım utf-8 desteği ile)

Alternatif 2 : Sağ tıklayın ve CSV Dosyasına aktarın

Alternatif 3 : Sütunun bölümlerini görselleştirmek için SUBSTRING işlevini kullanın. Misal:

ATIK YER SEÇİN (dosyaXml, 2200,200) mytable NEREDEN ID = 123456


0

Sadece görüntülemek zorundaysanız, bunu kullandım:

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

Sonuçta SMSS mesajlar penceresinde satır beslemeleri ve tüm içerik olsun. Tabii ki, sadece tek bir hücreye izin verir - birkaç satırdan tek bir hücre yapmak istiyorsanız, bunu yapabilirsiniz:

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

SQL kodu tarafından oluşturulan JSON dizeleri doğrulamak için bunu kullanın. Aksi halde okumak çok zor!


-1

Büyük varchar / metin sütununu hızlı bir şekilde görüntülemenin en kolay yolu:

declare @t varchar(max)

select @t = long_column from table

print @t

11
Ancak metin hala kesiliyor :-(
Rasmus
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.