2012-06-14 8 views
6

나는 SQL Server 2008을 사용하고 테이블 필드가 VARCHAR(MAX)입니다. 문제는 Hibernate을 사용하여 정보를 저장할 때 VARCHAR(MAX) 필드의 내용이 잘리지 않는 것입니다. 앱 서버 나 데이터베이스 서버에 오류 메시지가 표시되지 않습니다.SQL Server 필드가 잘리지 않음

이 필드의 내용은 일반 텍스트 파일입니다. 이 텍스트 파일의 크기는 383KB입니다.

이것은 내가이 문제를 해결하기 위해 지금까지 무엇을했는지 있습니다 :

  1. 텍스트로 VARCHAR(MAX)에서 데이터베이스 필드를 변경하고 같은 문제가 발생합니다.
  2. 는 SQL Server 프로파일 러를 사용하고 난 전체 텍스트 내용이 데이터베이스 서버에서 수신
    되는 것을 발견하지만, 절단 문제와 SQL을 볼 수 을하려고 할 때 어떤 이유로 프로파일 러는 정지. 내가 말했듯이, 그것이 얼기 직전에 나는
    이 전체 텍스트 파일 내용 (383KB)이 수신되었음을 알았 기 때문에 은 데이터베이스 문제 일 수 있다고 생각합니다.

이전에이 문제가 발생 했습니까? 이 절단의 원인은 무엇입니까?

참고 : SQL Studio에 들어가서 텍스트 필드 내용을 복사하여 텍스트 패드에 붙여 넣기 만하면됩니다. 그것이 내가 잘리는 것으로 나타났습니다.

미리 감사드립니다.

+1

내 대답과는 아무 상관이없는 제안을 사용해보십시오 : 프로파일을 사용 중지합니다. 대신 서버 측 추적을 사용하십시오. –

+0

@AaronBertrand 프로필러에 대해 조언하는 이유를 설명해주십시오. – Apostrofix

+1

@Apostrofix 프로필러는 서버를 무릎 꿇게 만들 수 있기 때문에. 추적도 가능하기 때문에 확장 이벤트도 가능하지만 프로파일 러를 사용하면 훨씬 쉽습니다. [이 기사에서] (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

당신은 더 입력하도록 유혹 할 수있다, 그러나 당신이 관리 스튜디오에서 반환 할 수있는 최대입니다

:

65535 for Results to Grid 
8192 for Results to Text 

당신이 정말로 Management Studio의 모든 데이터를보고 싶다면, 당신은 할 수 그것을 XML로 변환하려고 시도하지만 이것도 문제가됩니다. 5메가바이트 또는 무제한 그리드> 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가 표시됩니다.

목장 그냥 전성 검사에 원하는 정말 다른 모든 383K를 복사 할 수없는 경우

AT

BACK, 다음하지 않습니다! 다음을 사용하여 확인하십시오 :

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

데이터가 데이터베이스에 캡처 된 것을 보여 주어야하며, 문제는 도구 및 사용자 확인 방법입니다.

는 (I 이후 a tip about this here를 작성했습니다.)

+0

네, 맞습니다. 그리드에 대한 기본 결과가 있습니다. 예, 데이터베이스에서 읽고 그 필드를 파일에 쓰는 더미 프로그램을 작성해야만합니다. 첫 번째로이 문제가 발생하여 정말 고마워요. – Marquinio

+2

'SELECT CONVERT (XML, 'bob & sally')'는 XML 파싱 : 줄 1, 글자 6, 불법 이름 문자로 실패합니다. 'SELECT 'bob & sally'FOR XML PATH ('')'를 사용할 수 있지만'bob & sally'를 제공합니다. 나는 embionic을 피하기 위해'SELECT 'bob & sally'[processing-instruction (x)] FOR XML PATH ('')를 선호한다. –

+0

@Martin 좋은 지적입니다. XML을 사용하면 대개 더 많은 기본 문자열을 맨 위 창으로 이동하기위한 바로 가기입니다. –

1

SELECT * FROM dbo.table for XML PATH

관련 문제