2012-06-14 21 views
6

Ok sto utilizzando SQL Server 2008 e un campo tabella di tipo VARCHAR(MAX). Il problema è che quando si salvano le informazioni usando Hibernate, il contenuto del campo VARCHAR(MAX) viene troncato. Non vedo alcun messaggio di errore sul server delle app o sul server del database.Campo SQL Server troncato

Il contenuto di questo campo è solo un file di testo. La dimensione di questo file di testo è 383 KB.

Questo è quello che ho fatto finora per risolvere questo problema:

  1. Modificato il campo del database da VARCHAR(MAX) al testo e lo stesso problema si verifica .

  2. usato lo SQL Server Profiler e ho notato che l'intero contenuto del testo è essere
    ricevuto dal server di database, ma per qualche motivo il profiler si blocca quando si cerca per visualizzare l'SQL con il problema di troncamento. Come ho già detto, poco prima che si congela, ho notato che il contenuto del file di testo completo (383 KB) è stato ricevuto, ovvero
    , quindi sembra che sia il problema del database .

Qualcuno ha riscontrato questo problema prima? Qualche idea su cosa causa questo troncamento?

NOTA: voglio solo dire che sto solo andando in SQL Studio e semplicemente copiando il contenuto del campo TESTO e incollandolo su Textpad. È così che ho notato che si sta troncando.

Grazie in anticipo.

+1

Un suggerimento che non ha nulla a che fare con la mia risposta: smettere di usare Profiler. Utilizzare invece una traccia sul lato server. –

+0

@AaronBertrand Potresti spiegare per quale motivo ti opponi a Profiler? – Apostrofix

+1

@Apostrofix Perché Profiler può mettere il tuo computer in ginocchio. Quindi è possibile tracciare e così anche eventi estesi, ma è molto più facile da fare con Profiler. Da [questo articolo] (http://sqlperformance.com/2012/10/sql-trace/observer-overhead-trace-extended-events): 'SQL Server Profiler è uno strumento da evitare su server di produzione occupati, come mostrato dal decuplicato aumento della durata e dalla significativa riduzione della produttività per la riproduzione. –

risposta

17

Il tuo problema è che pensi che Management Studio ti presenterà tutti i dati. Non è così. Vai su Strumenti> Opzioni> Risultati della query> SQL Server. Se si utilizza Risultati in griglia, modificare "Caratteri massimi recuperati" per "Dati non XML" (è sufficiente notare che Risultati su griglia eliminerà qualsiasi CR/LF). Se si utilizza Risultati su testo, modificare "Numero massimo di caratteri visualizzati in ogni colonna."

enter image description here

Si può essere tentati di entrare di più, ma il massimo che si può restituire entro Management Studio è:

65535 for Results to Grid 
8192 for Results to Text 

Se si vuole veramente vedere tutti i dati in Management Studio, è possibile prova a convertirlo in XML, ma anche questo ha dei problemi. Risultati prima serie ai dati della rete> XML a 5 MB o illimitata, poi fare:

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

Ora, questo produrrà un risultato griglia in cui il link è in realtà cliccabile. Questo aprirà una nuova finestra dell'editor (non sarà una finestra di query, quindi non avrà pulsanti di esecuzione, IntelliSense, ecc.) Con i tuoi dati convertiti in XML. Ciò significa che sostituirà > con > ecc.Ecco un rapido esempio:

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

Risultato:

enter image description here

Quando si fa clic sulla griglia, si ottiene questa nuova finestra:

enter image description here

(Fa specie di avere IntelliSense, convalidare il formato XML, ecco perché vedi gli squigglie.)

al ranch

Se si desidera solo per test di integrità e non si ha realmente desidera copiare tutti i 383K altrove, quindi non lo fanno! Basta controllare utilizzando:

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

Questo dovrebbe dimostrare che i Suoi dati è stato catturato dal database, e il problema è lo strumento e il metodo di verifica.

(Da allora ho scritto a tip about this here.)

+0

Sì, hai ragione. Ho avuto i risultati predefiniti su Grid. Sì, l'ho capito dopo aver dovuto scrivere un programma fittizio per leggere dal database e scrivere quel campo su un file. Grazie mille, la prima volta che ho riscontrato questo problema. – Marquinio

+2

'SELECT CONVERT (XML, 'bob & sally')' fallisce con 'Analisi XML: riga 1, carattere 6, carattere nome non valido'. Si potrebbe usare 'SELECT 'bob & sally' FOR XML PATH ('')' ma che dà 'bob & sally'. Preferisco 'SELECT 'bob & sally' AS [processing-instruction (x)] PER PERCORSO XML ('')' per evitare l'istitazione. –

+0

@Martin buon punto, quando uso XML in questo modo di solito è una scorciatoia per spostare stringhe molto più semplici nel pannello superiore. –

1

provare a utilizzare SELECT * FROM dbo.table for XML PATH

Problemi correlati