2011-05-06 4 views
7

SQL Server 2005를 실행하는 Windows 컴퓨터에서 sscmcmd를 사용하여 csv 파일에 쿼리를 작성하려고합니다. 일반적으로 사용하는 명령 행 옵션은 다음과 같습니다.sqlcmd - 공백없이 열 길이 제한을 벗어나는 방법?

-l 60 -t 300 -r 1 -b -W -h -1 

그러나 열은 256 바이트에서 잘 렸습니다. 이 문제를 회피하기 위해, 나는 -W 대신이 명령 줄 옵션을 사용하여 시도 :이 전체 필드를 캡처

-y 8000 

하지만이 방법의 문제는 그 단지에 1메가바이트 이상에서 최대 파일 풍선 모든 여분의 공간으로 인해 약 200MB의 (나는 8000이 아마도 과잉이라고 생각하지만, 아마도 4000 이상이어야하고 현재는 데이터의 작은 하위 세트로 작업하고있다). -W 옵션은 일반적으로이 여분의 공간을 모두 없애지 만, 함께 사용하려고하면 상호 배타적이라고 나에게 알린다.

이 한계를 극복하기 위해 sqlcmd를 얻을 수있는 방법이 있습니까? 아니면 다른 프로그램 (예 : bcp 또는 osql)을 사용하면 쉽게 알 수 있습니까?


편집 :

SELECT ALIASES.AliasList as complianceAliases,  

: 여기에 우리가 (비슷한 코드가 필드의 무리에 사용되는) 절단되고있는 필드를 얻기 위해 사용하고있는 코드 조각입니다. ..

LEFT OUTER JOIN (Select M1.ID, M1.LIST_ID,stuff((SELECT '{|}' + isnull(Content2,'')+' '+isnull(Content3,'')+' '+isnull(Content4,'')+' '+isnull(Content5,'')+' '+isnull(Content6,'')+' '+isnull(Content7,'') 
            FROM fs_HOST3_TEST_web.ISI_APP_COMP_MULTI M2 with (nolock) 
            WHERE M1.LIST_ID = M2.LIST_ID and M1.ID = M2.ID and M1.TYPE = M2.TYPE          
            FOR XML PATH('') 
           ),1,1,'') as AliasList 
      FROM fs_HOST3_TEST_web.ISI_APP_COMP_MULTI M1 with (nolock) 
      WHERE M1.LIST_ID = 2001 AND M1.TYPE = 'Aliases' 
      GROUP BY m1.list_id,m1.ID,m1.Type) as ALIASES 
      ON ALIASES.LIST_ID = PAIR.COMP_LIST_ID AND ALIASES.ID = PAIR.COMP_ID 
+0

잘린 데이터는 어떤 데이터 유형입니까? – gbn

+0

우리는 stuff 함수와 FOR XML PATH 명령의 조합을 사용하여 여러 nvarchar (500) 필드를 단일 필드로 연결합니다. 나는 그들이 정확히 어떻게 작동하는지 (구글을 통해 해결책을 찾았는지는 잘 모르겠다.), 그러나 같은 분야에서 그들 모두와 결국 우리는 선택 진술을 통해 그들을 끌어 내고있다. 나는 답을 편집하고 코드를 포함 할 것이다. –

답변

12

"-y0"인수를 사용하여이 문제를 해결했습니다. 여전히 많은 공백을 남겼지 만 각 필드에서 가장 긴 데이터 끝에 도달 한 것처럼 보입니다.

그런 다음 반복되는 공백을 제거하고 모든 문제를 해결 한 프로그램을 통해 출력을 실행했습니다.

+0

그 이후로 더 좋은 방법이 있는지 궁금합니다. 지금 시간 검색 중 ... – Adam