[解決済み] SQL Server 2008 Management Studio で text または varchar(MAX) カラムの完全なコンテンツを表示するにはどうすればよいですか?
質問
このライブの SQL Server 2008 (ビルド 10.0.1600) データベースに
Events
テーブルがあり、このテーブルには
text
という名前のカラムがあります。
Details
. (そうです、私はこれが実際には
varchar(MAX)
カラムであるべきなのですが、このデータベースを設定した人がそのようにしなかったのです)。
この列には非常に大きな例外のログと関連する JSON データが含まれており、SQL Server Management Studio からアクセスしようとしていますが、グリッドからテキスト エディターに結果をコピーすると、いつも 43679 文字で切り捨てられます。
インターネット上のさまざまな場所で、XML データに取得される最大文字数を
Tools > Options > Query Results > SQL Server > Results To Grid
をUnlimitedに設定し、以下のようなクエリを実行するとのことです。
select Convert(xml, Details) from Events
where EventID = 13920
(なお、data is columnは全くXMLではありません。
CONVERT
からデータを取得する際の SSMS の制限を回避するために、他の誰かが使っているのを私がググって見つけた回避策に過ぎないのですが、このカラムを XML に変換しています。
text
または
varchar(MAX)
の列のいずれかです)。
しかし、上記のオプションを設定し、クエリを実行し、結果のリンクをクリックしても、次のようなエラーが表示されます。
XMLを表示できません。次のエラーが発生しました。 予期しないファイルの終わりが発生しました。5行目、位置220160。
解決策としては、XMLデータのサーバーから取得する文字数を増やすことです。この設定を変更するには、[ツール]メニューの[オプション]をクリックします。
では
このデータにアクセスする方法について何か考えがありますか?
カラムを
varchar(MAX)
に変換することで、私の苦境を解決できますか?
どのように解決するのですか?
SSMS では、XML データに対してのみ無制限のデータを許可しています。これはデフォルトではないので、オプションで設定する必要があります。
非常に限定された状況で機能するかもしれない1つのトリックは、単に以下のように特別な方法でカラムを命名し、XMLデータとして扱われるようにすることです。
DECLARE @S varchar(max) = 'A'
SET @S = REPLICATE(@S,100000) + 'B'
SELECT @S as [XML_F52E2B61-18A1-11d1-B105-00805F49916B]
SSMS (少なくともバージョン2012から18.3まで) では、以下のように結果が表示されます。
クリックすると、XMLビューアで全結果が表示されます。右にスクロールすると、Bの最後の文字が保存されていることがわかります。
しかし、これにはいくつかの重大な問題があります。クエリに追加の列を追加すると、効果がなくなり、追加の行はすべて最初の行に連結されるようになります。最後に、もし文字列が
<
のような文字が含まれている場合、XML ビューアを開くとパース エラーになります。
SQL Server の変換の問題を回避する、より堅牢な方法として
<
を
<
など、これらの文字が原因で失敗することは、以下の通りです(
Adam Machanicのクレジットはこちら
).
DECLARE @S varchar(max)
SELECT @S = ''
SELECT @S = @S + '
' + OBJECT_DEFINITION(OBJECT_ID) FROM SYS.PROCEDURES
SELECT @S AS [processing-instruction(x)] FOR XML PATH('')
関連
-
[解決済み] SQL Server で複数行のテキストを 1 つのテキスト文字列に連結する方法
-
[解決済み] SQL Server テーブルにカラムが存在するかどうかを確認する方法は?
-
[解決済み] SQL Server の DateTime データ型から日付だけを返す方法
-
[解決済み] SQL ServerでJOINを使用してUPDATE文を実行するにはどうすればよいですか?
-
[解決済み] カラムの変更:NULLをNOT NULLに変更する
-
[解決済み] SQLのIN句をパラメータ化する
-
[解決済み] SQL Serverでテーブルからカラム名を取得するにはどうすればよいですか?
-
[解決済み] Sql Server 'Saving changes is not permitted' エラー ► テーブルの再作成を必要とする変更を保存しないようにする。
-
[解決済み] カラム名の変更 SQL Server 2008
-
[解決済み】SSMSでntextまたはnvarchar(max)からすべてのテキストを表示する方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】エラー "INSERT EXEC文はネストできません。" "INSERT-EXEC文の中でROLLBACK文は使用できません。" これを解決するにはどうすればよいですか?
-
[解決済み] FOREIGN KEY制約で参照されているため、テーブルを切り捨てることができないのですか?
-
[解決済み] 管理者ユーザーで有効なxp_cmdshellへのアクセスが拒否されました。
-
[解決済み] TABLOCKとTABLOCKXの比較
-
[解決済み] 分散型トランザクションを開始できない
-
[解決済み] SSRS 2つ目の文字列の前にある文字列から部分文字列を抽出する
-
[解決済み] 累積和の求め方
-
[解決済み] 一括読み込みができません。オペレーティングシステムのエラーコード5(アクセスが拒否されました。)
-
[解決済み] SQL ServerでRegExを使用する
-
[解決済み] Printステートメントを使用してVARCHAR(MAX)を表示するには?