SSMSでntextまたはnvarchar(max)のすべてのテキストをどのように表示しますか?


191

SQL Server Management StudioでNTEXTまたはNVARCHAR(max)のすべてのテキストをどのように表示しますか?デフォルトでは、最初の数百文字(255?)しか返さないように見えますが、プログラムを記述せずにフィールド全体をすばやく表示したい場合もあります。SSMS 2012にもこの問題があります:(


回答:


91

オプション(クエリ結果/ SQLサーバー/グリッドページへの結果)

現在のクエリのオプションを変更するには、[クエリ]メニューの[クエリオプション]をクリックするか、[SQL Serverクエリ]ウィンドウを右クリックして[クエリオプション]を選択します。

...

取得
する最大文字数各セルに表示される最大文字数を指定するには、1〜65535の数値を入力します。

ご覧のとおり、最大は64kです。デフォルトははるかに小さいです。

BTW Results to Textにはさらに大きな制限があります:

各列に表示される最大文字数
この値のデフォルトは256です。この値を大きくすると、切り捨てられずにより大きな結果セットが表示されます。最大値は8,192です。


1
Remusが彼の回答で書いたように、MAXで定義された列のデータ型の最大ストレージサイズは2 GBであるため、SSMSでそのすべてのデータを表示するのは面倒であるため、いくつかの制限が必要であるため、制限があります。
Ivan G

13
@IvanG-そうではない。XMLと同じようにハイパーリンクするだけで、クリックすると新しいウィンドウで開きます。私が通常使用する回避策は、これをXMLにキャストすることです。XMLデータは無制限の長さを許可するように設定できます。
Martin Smith、

@MartinSmith興味深いので、SSMSに大量のデータを表示させることができます...
Ivan G

11
文字数が65535未満の場合にのみ機能します。これは、ntextの最大値をはるかに下回ります。
Polyfun 2015年

1
@IvanGは「ファイルへの結果」でさえこの制限の影響を受けます。
Iain、2016年

216

NVARCHAR(MAX)列から(Results To Grid)を選択して右クリックし、結果をCSVファイルとして保存することで、フルテキスト(99,208文字)を取得できました。結果を表示するには、テキストエディター(Excelではありません)でCSVファイルを開きます。面白いことに、同じクエリを実行しようとしたが、Results to Fileを有効にすると、Results to Text制限を使用して出力が切り捨てられました。

@MartinSmithが(現在)受け入れられた回答へのコメントとして記述した回避策は私にとってはうまくいきませんでした(「 '['文字、16進値0x5B、名前に含まれる」)。


17
右クリックして名前を付けてCSVに保存するのは、NTEXTフィールドから巨大なテキスト値を取得するのと同じように機能しました。
David Alpert

3
@ajeh:SSMS 2012のどのバージョンを使用していますか?私は自分のSSMS 2012(バージョン11.0.5343.0)でテストしました(私の回答で説明したのと同じ手順を正確に実行しました)。動作します
Eric

8
ただし、Excelで開かないでください。CSVインポートによってデータが再度切り捨てられます。:)
Johncl 2017

1
おかげで、このSSMS 2012年使用して、私はvarchar型(最大)フィールドからテキストデータの7メガバイトをエクスポートすることができ
ブライアンHasden

2
タブ区切りテキストとして保存すると、より効果的に機能します。csv形式では、テキスト内のすべての引用符が2倍になります。
davidthegrey

138

クイックトリック

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

6
列のコンテンツが実際にXMLである場合、これは完全に(CDATA部分なしで)機能します
axk

2
これは私にとってもうまくいきました、私はms sqlから抜け出すために必要なjsonデータを持っていました。
Dev_Corps 2017年

また、コンテンツはXMLエスケープされています。テキストを取り出したら、freeformatter.comなどのツールを使用してエスケープを解除する必要があります。
harsimranb 2017年

これは私にとってうまくいきました: `` `DECLARE @g geography; ... Cast(@ g.ToString()as xml);を選択します。`` `
セルゲイ・ジノビエフ

1
これは私にとってSSMS v18で機能し、他のソリューションによって切り捨てられた250kbのjson文字列を表示しました。さらに、テキストビューアへのリンクが表示されるので気に入っています。+!
Roberto

54

SSMSのアドインを作成しましたが、この問題はそこで修正されています。次の2つの方法のいずれかを使用できます。

「現在のセルを1:1でコピー」を使用して、元のセルデータをクリップボードにコピーできます。

http://www.ssmsboost.com/Features/ssms-add-in-copy-results-grid-cell-contents-line-with-breaks元のセルの内容をコピーする

または、代わりに、「セルビジュアライザ」機能を使用して外部テキストエディタ(notepad ++またはnotepad)でセルのコンテンツを開くことができます。http//www.ssmsboost.com/Features/ssms-add-in-results-grid-visualizers

(機能により、任意の外部アプリケーションでフィールドのコンテンツを開くことができるため、テキストであることがわかっている場合は、テキストエディターを使用して開きます。コンテンツが画像付きのバイナリデータの場合は、画像として表示を選択します。以下のサンプルでは、​​画像を開いています。 ):SSMS結果グリッドビジュアライザ


2
本当に便利な拡張機能のように見えますが、商用製品(または試用版)が必要なため、回答として受け入れることはできません。ありがとう!
NickG 2012

4
+1完璧に機能する素敵な無料の拡張機能...ありがとうございます!
2014年

2
おかげで、これはまさに私が望んでいることです。
デレックディーン2014

9
残念ながら、2017年9月4日以降、SSMS Boostは無料ではなくなりました(リリースされた新しいバージョンごとに30日間の試用を除く)
csrowell

4
これは現在商用製品であり、無料ライセンスは上記の機能のいずれもカバーしておらず、無効になっており、PROバージョンを購入するためのポップアップが表示されます。答えは彼のソフトウェアの単なる宣伝です。
メタバディ

3

データをXMLとして返す

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

期待する結果に応じて、SSMSオプションウィンドウで適切な制限を設定してください。 ここに画像の説明を入力してください

あなたが戻っているテキストのようなエンコードされていない文字が含まれていない場合、これは動作します&代わりの&amp;XML変換が失敗する原因になりますことを。

PowerShellを使用してデータを返す

これには、コマンドを実行するマシンにPowerShell SQL Serverモジュールをインストールする必要があります。

すべての設定が完了したら、次のスクリプトを構成して実行します。

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"

-MaxCharLengthパラメータをニーズに合った値に設定してください。


1

代替方法1:右クリックしてセルをコピーし、テキストエディタに貼り付けます(うまくいけば、utf-8のサポートが必要です)

代替方法2:右クリックしてCSVファイルにエクスポート

代替方法3:SUBSTRING関数を使用して、列の一部を視覚化します。例:

mytable WHERE id = 123456からSUBSTRING(fileXml、2200,200)を選択します


0

表示するだけの場合は、これを使用しました。

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

最終的に、SMSSのメッセージウィンドウにラインフィードとすべてのコンテンツが表示されます。もちろん、これは単一のセルのみを許可します-複数の行から単一のセルを実行したい場合は、これを行うことができます:

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コードによって生成されたJSON文字列を検証します。そうでなければ読みにくい!


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.