SQL Server Management StudioでNTEXTまたはNVARCHAR(max)のすべてのテキストを表示するにはどうすればよいですか?デフォルトでは、最初の数百文字(255?)しか返されないようですが、プログラムを作成せずにフィールド全体をすばやく表示したい場合があります。 SSMS 2012でさえこの問題を抱えています:(
オプション(クエリ結果/ SQL Server /グリッドページへの結果)
現在のクエリのオプションを変更するには、[クエリ]メニューの[クエリオプション]をクリックするか、[SQL Serverクエリ]ウィンドウで右クリックして[クエリオプション]を選択します。
...
取得された最大文字数
1〜65535の数字を入力して、各セルに表示される最大文字数を指定します。
ご覧のとおり、最大値は64kです。デフォルトははるかに小さいです。
ところで テキストへの結果 にはさらに劇的な制限があります:
各列に表示される最大文字数
この値のデフォルトは256です。この値を大きくすると、切り捨てることなくより大きな結果セットが表示されます。最大値は8,192です。
NVARCHAR(MAX)列からフルテキスト(99,208文字)を取得できました。その列だけを([グリッドへの結果])選択して右クリックし、結果をCSVファイルとして保存しました。おもしろいことに、同じクエリを実行しようとして、[ファイルへの結果]を有効にすると、[テキストへの結果]の制限を使用して出力が切り捨てられました。
@MartinSmithが(現在)受け入れられた回答へのコメントとして説明した回避策は、私にとってはうまくいきませんでした(「 '['文字、16進値0x5B、名前に含めてください」)。
クイックトリック
SELECT CAST('<A><![CDATA[' + CAST(LogInfo as nvarchar(max)) + ']]></A>' AS xml)
FROM Logs
WHERE IDLog = 904862629
SSMSのアドインを作成しましたが、この問題は修正されています。次の2つの方法のいずれかを使用できます。
「Copy current cell 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
(この機能により、任意の外部アプリケーションでフィールドのコンテンツを開くことができます。したがって、テキストであることがわかっている場合は、テキストエディターを使用して開きます。 ):
XMLとしてデータを返す
SELECT CONVERT(XML, [Data]) AS [Value]
FROM [dbo].[FormData]
WHERE [UID] LIKE '{my-uid}'
期待する結果に応じて、SSMSオプションウィンドウで適切な制限を設定してください。
これは、返されるテキストに&
の代わりに&
のようなエンコードされていない文字が含まれており、XML変換が失敗する場合に機能します。
PowerShellを使用してデータを返す
そのためには、コマンドを実行するマシンに PowerShell SQL Server module がインストールされている必要があります。
すべて設定したら、次のスクリプトを構成して実行します。
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
パラメーターを、ニーズに合った値に設定してください。
大きなvarchar/text列をすばやく表示する最も簡単な方法:
declare @t varchar(max)
select @t = long_column from table
print @t