Jak przeglądasz WSZYSTKIE teksty z ntext lub nvarchar (max) w SSMS?

193

Jak wyświetlić CAŁY tekst z NTEXT lub NVARCHAR (maks.) W SQL Server Management Studio? Domyślnie wydaje się, że zwraca tylko kilkaset pierwszych znaków (255?), Ale czasami chcę po prostu szybki sposób przeglądania całego pola, bez konieczności pisania programu, aby to zrobić. Nawet w SSMS 2012 nadal występuje ten problem :(

NickG
źródło
1
możliwy duplikat tego, jak uzyskać pełny zestaw wyników z SSMS
Martin Smith

Odpowiedzi:

91

Opcje (wyniki zapytania / SQL Server / wyniki na stronie siatki)

Aby zmienić opcje dla bieżących zapytań, kliknij Opcje zapytania w menu Zapytanie lub kliknij prawym przyciskiem myszy w oknie Zapytanie programu SQL Server i wybierz Opcje zapytania.

...

Maksymalna liczba pobranych znaków
Wprowadź liczbę od 1 do 65535, aby określić maksymalną liczbę znaków, które będą wyświetlane w każdej komórce.

Jak widać, maksymalna to 64k. Domyślnie jest znacznie mniejszy.

BTW Wyniki na tekst ma jeszcze bardziej drastyczne ograniczenie:

Maksymalna liczba znaków wyświetlanych w każdej kolumnie.
Wartość domyślna to 256. Zwiększ tę wartość, aby wyświetlać większe zestawy wyników bez obcięcia. Maksymalna wartość wynosi 8192.

Remus Rusanu
źródło
1
Jak pisał Remus w swojej odpowiedzi, istnieją ograniczenia, ponieważ maksymalny rozmiar pamięci dla typu danych w kolumnie zdefiniowanej za pomocą MAX wynosi 2 GB, więc muszą istnieć pewne ograniczenia, ponieważ wyświetlenie wszystkich tych danych w SSMS byłoby kłopotliwe.
Ivan G,
13
@IvanG - Niezupełnie. Może być po prostu hiperłączony w taki sam sposób jak XML, a kliknięcie go otworzy go w nowym oknie. Obejście, którego zwykle używam, polega na przesłaniu go do XML, tak jak tutaj . Dane XML można ustawić, aby umożliwić nieograniczoną długość.
Martin Smith,
@MartinSmith Interesujące, więc możliwe jest, aby SSMS wyświetlał tak dużą ilość danych ...
Ivan G
11
Działa tylko wtedy, gdy liczba znaków jest mniejsza niż 65535, czyli znacznie poniżej maksymalnej wartości ntext.
Polyfun,
1
@IvanG nawet „Wynik do pliku” cierpi z powodu tego ograniczenia.
Iain
216

Byłem w stanie uzyskać pełny tekst (99 208 znaków) z kolumny NVARCHAR (MAX), wybierając (Results To Grid) tylko tę kolumnę, a następnie klikając ją prawym przyciskiem myszy, a następnie zapisując wynik jako plik CSV. Aby wyświetlić wynik, otwórz plik CSV za pomocą edytora tekstu (NIE Excel). Zabawne, że kiedy próbowałem uruchomić to samo zapytanie, ale mając włączone wyniki do pliku, wyniki zostały obcięte przy użyciu limitu wyników do tekstu.

Obejście, które @MartinSmith opisało jako komentarz do (obecnie) zaakceptowanej odpowiedzi, nie działało dla mnie (wystąpił błąd podczas próby wyświetlenia pełnego wyniku XML narzekającego na znak „[”, wartość szesnastkowa 0x5B, nie może być uwzględnione w nazwie „).

Eric
źródło
17
Kliknięcie prawym przyciskiem myszy, zapisz jako, CSV działało dla mnie jak urok, aby uzyskać ogromną wartość tekstową z pola NTEXT.
David Alpert
3
@ajeh: jakiej wersji SSMS 2012 używasz? Właśnie go przetestowałem (wykonałem dokładnie te same kroki, które opisałem w mojej odpowiedzi) z moim SSMS 2012 (wersja 11.0.5343.0) i działa
Eric
8
Ale nie otwieraj go w programie Excel, import CSV ponownie obetnie dane. :)
Johncl
1
Dzięki, dzięki temu mogłem wyeksportować 7 MB danych tekstowych z pola varchar (max) przy użyciu SSMS 2012.
Brian Hasden
2
Zapisywanie jako tekst rozdzielany tabulatorami działa lepiej. Format csv podwaja wszystkie cytaty w tekście.
davidthegrey
140

Szybka sztuczka

SELECT CAST('<A><![CDATA[' + CAST(LogInfo as nvarchar(max)) + ']]></A>' AS xml)
FROM Logs
WHERE IDLog = 904862629
André Kops
źródło
6
Działa to doskonale (bez części CDATA), gdy zawartość kolumny to tak naprawdę XML
axk 16.09.16
2
To działało również dla mnie, miałem dane JSON, które potrzebowałem, aby wydostać się z ms sql.
Dev_Corps
1
Ponadto zawartość jest opatrzona kodami ucieczki XML. Po wyjęciu tekstu należy go usunąć z ekranu za pomocą narzędzia takiego jak freeformatter.com.
harsimranb
To działało dla mnie: `` DECLARE @g geografia; ... wybierz Cast (@ g.ToString () jako xml); ``
Siergiej Zinowjew
1
To działało dla mnie z SSMS v18, aby wyświetlić ciąg json 250kb, który został obcięty przez inne rozwiązania. Dodatkowo podoba mi się to, ponieważ daje link do przeglądarki tekstu. +!
Roberto
54

Napisałem dodatek do SSMS i ten problem został tam naprawiony. Możesz użyć jednego z 2 sposobów:

możesz użyć „Kopiuj bieżącą komórkę 1: 1”, aby skopiować oryginalne dane komórki do schowka:

http://www.ssmsboost.com/Features/ssms-add-in-copy-results-grid-cell-contents-line-with-breaksSkopiuj oryginalną zawartość komórki

Ewentualnie możesz otworzyć zawartość komórki w zewnętrznym edytorze tekstu (notatnik ++ lub notatnik) za pomocą funkcji „Wizualizatory komórek”: http://www.ssmsboost.com/Features/ssms-add-in-results-grid-visualizers

(funkcja umożliwia otwieranie zawartości pola w dowolnej aplikacji zewnętrznej, więc jeśli wiesz, że jest to tekst - używasz edytora tekstu, aby go otworzyć. Jeśli zawartość jest danymi binarnymi ze zdjęciem - wybierasz widok jako obraz. Przykład poniżej pokazuje otwieranie obrazu ):Wizualizatory siatki wyników SSMS

Andrei Rantsevich
źródło
2
Wygląda na bardzo przydatne rozszerzenie, ale nie mogę zaakceptować go jako odpowiedzi, ponieważ wymaga produktu komercyjnego (lub wersji próbnej). W każdym razie dzięki!
NickG,
4
+1 Ładne bezpłatne rozszerzenie, które działa idealnie ... Dzięki!
ODNOWIONO
2
Dzięki, to robi dokładnie to, czego chcę.
Derreck Dean
9
Niestety, od 4 września 2017 r. SSMS Boost nie jest już bezpłatny (z wyjątkiem 30-dniowego
okresu
4
To jest teraz produkt komercyjny, bezpłatna licencja nie obejmuje żadnej z wymienionych funkcji, są one wyłączone i pojawia się wyskakujące okienko, aby kupić wersję PRO. Odpowiedź to tylko promocja jego oprogramowania.
metabuddy
3

Zwróć dane jako XML

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

Upewnij się, że ustawiłeś rozsądny limit w oknie opcji SSMS, w zależności od oczekiwanego wyniku. wprowadź opis zdjęcia tutaj

Działa to, jeśli zwracany tekst nie zawiera niezakodowanych znaków , ponieważ &zamiast &amp;tego spowoduje to niepowodzenie konwersji XML.

Zwracanie danych za pomocą PowerShell

W tym celu musisz zainstalować moduł PowerShell SQL Server na komputerze, na którym uruchomisz polecenie.

Jeśli wszystko jest skonfigurowane, skonfiguruj i uruchom następujący skrypt:

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"

Upewnij się, że ustawiłeś -MaxCharLengthparametr na wartość, która odpowiada Twoim potrzebom.

dvlsc
źródło
1

Alternatywa 1 : Kliknij prawym przyciskiem myszy, aby skopiować komórkę i wkleić do edytora tekstu (mam nadzieję, że z obsługą utf-8)

Alternatywa 2 : Kliknij prawym przyciskiem myszy i wyeksportuj do pliku CSV

Alternatywa 3 : Użyj funkcji SUBSTRING do wizualizacji części kolumny. Przykład:

WYBIERZ SUBSTRING (plik Xml, 2200,200) Z mytable WHERE id = 123456

Don G.
źródło
0

Jeśli musisz go tylko wyświetlić, użyłem tego:

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

Efektem końcowym jest to, że otrzymuję informacje o wierszach i całą zawartość w oknie wiadomości SMSS. Oczywiście, pozwala to tylko na jedną komórkę - jeśli chcesz zrobić jedną komórkę z szeregu wierszy, możesz to zrobić:

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

Używam tego do sprawdzania poprawności ciągów JSON generowanych przez kod SQL. W przeciwnym razie jest to trudne do odczytania!

CDenby
źródło
-1

Najłatwiejszy sposób szybkiego wyświetlenia dużej kolumny varchar / text:

declare @t varchar(max)

select @t = long_column from table

print @t
Rafael Lenartowicz
źródło
11
Ale tekst jest nadal obcinany :-(
Rasmus