2012-06-14 22 views
6

Tamam SQL Server 2008 kullanıyorum ve VARCHAR(MAX) türünde bir tablo alanım var. Sorun, Hibernate kullanarak bilgi kaydedilirken, VARCHAR(MAX) alanının içeriğinin kesilmesidir. Uygulama sunucusu veya veritabanı sunucusunda herhangi bir hata mesajı görmüyorum.SQL Server alanı kesiliyor

Bu alanın içeriği yalnızca düz metin dosyasıdır. Bu metin dosyasının boyutu 383KB'dir.

Bu bu sorunu gidermek için şu ana kadar yapmış budur:

  1. METİN VARCHAR(MAX) gelen veritabanı alanını değiştirdi ve aynı sorun oluşur.
  2. SQL Server Profiler kullanılmış ve tam metin içerik veritabanı sunucusu tarafından alınan
    olmak olduğunu fark ettim, ama kesme sorunu olan SQL görüntülemek için çalışırken nedense profilci donar. Dediğim gibi, donmadan hemen önce,
    tam metin dosyası içeriğinin (383KB) alındığını fark ettim, bu yüzden veritabanı sorunu olabileceğinden görünüyor.

Bu sorunla karşılaşmış herhangi biri var mı? Herhangi bir fikir bu kesilmeye ne sebep olur?

Not: Sadece SQL Studio'ya girdiğimi ve sadece TEXT alan içeriğini kopyalayıp Textpad'e yapıştığımı belirtmek isterim. Bu şekilde kesildiğini fark ettim.

Şimdiden teşekkürler.

+1

cevabım ile ilgisi olan bir öneri kullanmayı deneyin: Profiler kullanarak durdurun. Bunun yerine bir sunucu tarafı izleme kullanın. –

+0

@AaronBertrand Profiler'e neden karşı çıktığınızı açıklar mısınız? – Apostrofix

+1

@Apostrofix Profiler sunucunuzu dizlerine getirebileceğinden. Bu yüzden bir izleme ve böylece Genişletilmiş Olaylar olabilir, ancak Profiler ile yapmak çok daha kolay. [Bu makale] 'dan (http://sqlperformance.com/2012/10/sql-trace/observer-overhead-trace-extended-events): 'SQL Server Profiler, gösterildiği gibi yoğun üretim sunucularında kaçınılması gereken bir araçtır. zamanla on kat artış ve replay için verimlilikte önemli bir azalma. ' –

cevap

17

Sorununuz, Management Studio'nun tüm verileri size sunacağını düşündüğünüzdür. Olmaz. Araçlar> Seçenekler> Sonuçları Sırala> SQL Server'a gidin. Sonuçlar için Kılavuz'a kullanıyorsanız, "Olmayan XML verisi" için "Alınan Maksimum Karakterler" i değiştirin (yalnızca Sonuçlar, Kılavuza Grid'in herhangi bir CR/LF'yi ortadan kaldıracağını unutmayın). Sonuçları metne kullanıyorsanız, "Her sütunda gösterilen maksimum karakter sayısı" nı değiştirin.

enter image description here

Daha girmek için cazip olabilir, ancak Yönetim Studio içinde iade edebilirsiniz maksimum

:

65535 for Results to Grid 
8192 for Results to Text 

gerçekten Management Studio'da tüm verileri görmek istiyorsanız, aşağıdakileri yapabilirsiniz XML'e dönüştürmeyi deneyin, ancak bunun da sorunları var. 5 MB veya sınırsız Izgara> XML veri için ilk seti Sonuçları, daha sonra yapın:

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

Şimdi bu bağlantıyı aslında tıklanabilir bir ızgara sonucu üretecektir. Bu, verilerinizi XML'e dönüştürülmüş olarak yeni bir editör penceresi (sorgu penceresi olmayacak, böylece yürütme düğmelerine, IntelliSense'e vb. Sahip olmayacaktır) açacaktır. Bu, >'un > vb. Ile değiştirileceği anlamına gelir.İşte size kısa bir örnek:

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

Sonuç:

enter image description here

Eğer ızgara tıkladığınızda, bu yeni bir pencere: Bu biraz yapar (

enter image description here

Intelligence var, XML formatını onaylıyorsunuz, bu yüzden squigglies'ı görüyorsunuz.)

RANCH sadece sağlamlık denetimi istiyoruz ve gerçekten başka bir yerde tüm 383K kopyalamak istemiyorsanız

AT

GERİ, sonra yok! Sadece kullanarak kontrol edin:

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

Bu veri veritabanı tarafından yakalanan ve sorun aracı ve doğrulama sizin yöntemidir olduğunu göstermek gerekir.

(O zamandan beri a tip about this here yazdım.)

+0

Evet, haklısınız. Grid için varsayılan sonuçlar vardı. Evet, bunu veritabanından okumak ve bu alana bir dosyaya yazmak için kukla bir program yazmak zorunda kaldıktan sonra anladım. Çok teşekkür ederim, ilk defa bu problemle karşılaştım. – Marquinio

+2

'SELECT CONVERT (XML, 'bob & sally')' XML ayrıştırma ile başarısız: satır 1, karakter 6, yasadışı ad karakteri '. 'SELECT' bob & sally 'XML PATH (' ') 'için kullanabilirsiniz, ancak bu' bob & sally' verir. Ben SELECT 'bob & sally' AS [işleme-yönerge (x)] XML PATH ('') 'için enterikasyonu önlemek için tercih ederim. –

+0

@Martin iyi bir nokta, XML'i bu şekilde kullandığımda, genellikle daha fazla temel dizeyi üst bölüme taşımak için bir kısayol. –

1

SELECT * FROM dbo.table for XML PATH