2012-06-14 11 views
6

いいえSQL Server 2008を使用していて、VARCHAR(MAX)のテーブルフィールドがあります。問題は、Hibernateを使用して情報を保存するときに、VARCHAR(MAX)フィールドの内容が切り捨てられることです。アプリケーションサーバーまたはデータベースサーバーのいずれにもエラーメッセージが表示されません。SQL Serverのフィールドが切り捨てられました

このフィールドの内容は単なるテキストファイルです。このテキストファイルのサイズは383KBです。

これは私がこの問題を解決するために、これまで行われてきたものである:

  1. VARCHAR(MAX)からTEXTへのデータベースフィールドを変更し、同じ 問題が発生します。 SQL ServerプロファイラとIを使用し

  2. 全文 コンテンツは、データベース・サーバが受信した
    されているが、切り捨ての問題でSQLを表示する をしようとしたときに何らかの理由でプロファイラがフリーズことに気づきました。私が言ったように、フリーズする直前に、
    は、フルテキストファイルの内容(383KB)が受信されていることに気付きました。したがって、データベースの問題である可能性があります。

誰もこの問題が発生しましたか?この切り詰めの原因は何ですか?

注:ちょうどSQL Studioに入り、TEXTフィールドの内容をコピーしてTextpadに貼り付けるだけです。それは私がそれが切り捨てられていることに気づいた方法です。

ありがとうございます。

+1

の提案を使用してみてください:プロファイラを使用して停止します。代わりにサーバー側のトレースを使用します。 –

+0

@AaronBertrandなぜProfilerにアドバイスするのか説明してください。 – Apostrofix

+1

@Apostrofix Profilerはサーバーを無意味にすることができるためです。トレースも可能ですし、Extended Eventsも可能ですが、Profilerを使用する方がはるかに簡単です。 [この記事から](http://sqlperformance.com/2012/10/sql-trace/observer-overhead-trace-extended-events):「SQL Server Profilerは、使用中のプロダクションサーバーでは避けるべきツールです再生時間の10倍の増加とスループットの大幅な低下によって、改善されました」。 –

答えて

17

Management Studioがすべてのデータを提示すると思われることが問題です。それはしません。 [ツール]> [オプション]> [クエリ結果]> [SQL Server]を選択します。グリッドへの結果を使用している場合は、「非XMLデータ」の「最大文字数」を変更します(グリッドへの結果はCR/LFを削除します)。結果をテキストにする場合は、「各列に表示される最大文字数」を変更します。

enter image description here

あなたはより多くを入力するように誘惑されるかもしれませんが、あなたが管理Studio内返すことができる最大値は以下のとおりです。

65535 for Results to Grid 
8192 for Results to Text 

あなたが本当に管理Studio内のすべてのデータを表示したい場合は、することができますそれをXMLに変換しようとすると、これにも問題があります。最初の5 MBまたは無制限にグリッド> XMLデータに結果を設定し、実行します。

SELECT CONVERT(XML, column) FROM dbo.table WHERE... 

を今、このリンクは、実際にクリック可能であるグリッドの結果を生成します。これにより、データがXMLに変換された新しいエディタウィンドウが開きます(クエリウィンドウではなく、実行ボタン、IntelliSenseなどはありません)。つまり、>>などに置き換えます。ここでは簡単な例です:

SELECT CONVERT(XML, 'bob > sally'); 

結果:

enter image description here

あなたはグリッド上でクリックすると、あなたは、この新しいウィンドウを取得:それは一種のない(

enter image description here

をIntelliSenseを持って、XMLフォーマットを検証する必要があります。それで、あなたはsquiggliesを見るのです。)

RANCH AT BACK

あなただけの健全性チェックをしたいと本当に他の場所ですべての383Kをコピーしたくないし、ない場合は!

SELECT DATALENGTH(column) FROM dbo.table WHERE... 

これは、データがデータベースによって取得されたことを示しているはずです。問題はツールと検証方法です。

(。私は以来a tip about this hereを書いた)

+0

はい、あなたは正しいです。私はグリッドにデフォルトの結果を持っていました。うん、データベースから読み込み、そのフィールドをファイルに書き込むためのダミープログラムを書かなくてはならなかったのですが、これを実現しました。初めてこの問題に遭遇しました。ありがとうございました。 – Marquinio

+2

'SELECT CONVERT(XML、 'bob&sally')'が 'XML parsing:行1、文字6、不正な名前文字 'で失敗します。 'SELECT 'bob&sally' FOR XML PATH( '')'を使うことができますが、 'bob & sally'となります。私はentionicを避けるために 'SELECT 'bob&sally' AS [processing-instruction(x)] FOR XML PATH( '')'を好む。 –

+0

@Martinの良い点は、XMLをこのように使用すると、より多くの基本的な文字列を上部ペインに移動するためのショートカットになります。 –

1

私の答えとは何の関係もありませんSELECT * FROM dbo.table for XML PATH

関連する問題