2009-08-26 5 views
6

잠시 동안 조사 중이며 계속 벽돌 벽에 부딪 치고 있습니다. xls 파일에서 OpenRowset 명령을 통해 임시 테이블로 가져옵니다. 이제 특정 열을 가져 오기 위해 범위 값이 있지만 가장 일반적인 문제는 다음과 같습니다. 긴 숫자로 구성된 열은 15598이고 일부 열은 문자열 (예 : 15598-E)입니다.TSQL의 OpenRowSet 명령이 NULL을 반환 중입니다.

이제 openrowset은 문자열 버전을 아무런 문제없이 읽지 만 숫자 버전은 NULL로보고합니다. openrowset에 그 문제가 있고 저자가 "HDR = YES; IMEX = 1"을 쿼리 문자열에 구현한다고 말하면서 (http://www.sqldts.com/254.aspx) 읽었지만 전혀 작동하지 않습니다.

혹시이 모든 문제가 발생 했습니까?

몇 가지 추가 정보가 있습니다. 나는 JET 엔진 (Microsoft.Jet.OLEDB.4.0)이 작업을 수행 할 수 없습니다 그래서 이것은처럼 내 쿼리 모습입니다 : 우리는 같은 문제에 걸쳐 왔어요

SELECT * 
FROM 
    OPENROWSET('MSDASQL' 
       , 'Driver=Microsoft Excel Driver (*.xls);HDR=YES;IMEX=1;DBQ=C:\ImportFile.xls;' 
      , 'SELECT * FROM [Sheet1$]') 
+2

이제 ETL 사람들이 수입을 위해 Excel을 싫어하는 이유를 알았습니다! – HLGEM

답변

6

Excel ODBC 드라이버를 사용 중입니다. 동일한 연결 문자열을 사용하여 JET OLEDB Provider를 사용해 보셨습니까?

select * from openrowset(
    'Microsoft.Jet.OLEDB.4.0', 
    'Data Source=C:\ImportFile.xls;Extended Properties="Excel 8.0;HDR=Yes;IMEX=1"', 
    'SELECT * FROM [Sheet1$]') 

편집 : 죄송합니다, 당신의 마지막 단락을 발견했습니다. 확실히 Excel ODBC 드라이버는 여전히 JET 엔진을 통해 진행되므로 어떤 차이가 있습니까?

편집 : KB194124 링크를 살펴본 결과 권장하지 않는 레지스트리 값이 변경되지 않은 컴퓨터의 기본값입니다. 위의 방법을 문제없이 여러 번 사용했습니다. 어쩌면 환경 문제일까요?

+0

아무 문제 없어, 체크 아웃 http://stackoverflow.com/questions/1178243/what-is-the-difference-between-odbc-and-oledb 더 많은 정보 – StevenMcD

+0

감사합니다! 정말 감사! – StevenMcD

+0

+1. 그 후 1 년이 지나고 같은 문제가 해결되었습니다. – 8kb

1

. 불행히도 우리는 해결책을 찾지 못했습니다. 레지스트리 수정이 있음을 나타내는 자세한 정보는 here입니다.

+0

쿨, 덕분에 링크 – StevenMcD

2

문제를 가지고있는 열을, Excel에서 파일을 여는 괜찮다면 열을 선택하고

데이터 할 -> 텍스트 나누기 -> 다음 -> 다음 -> 텍스트를

스프레드 시트를 저장하고 모든

OPENROWSET

에서 텍스트로 와야 내가 파일의 형식을 연결된 서버를 설정하고 설정하여 열 대신 Excel에서 파일, .CSV 사용하여 발견했습니다 schema.ini에서 이와 같은 수입을 다루기위한 좀 더 실용적인 접근 방법을 제시 할 수 있습니다. 각 열의 형식을 선택하십시오.

0

나는 동일한 문제가있었습니다. 시트의 첫 번째 행 위치에 문자열/숫자 값 (예 : 123ABC)이 포함 된 행을 잘라내어 붙여 넣는 문제를 해결했습니다. 어떤 이유로 T-SQL은 첫 번째 행을 읽고 모든 값이 숫자라고 가정합니다.이 링크에서 SqlACID에 의해

0

응답했다 위대한 [https://wikigurus.com/Article/Show/185717/OpenRowSet-command-in-TSQL-is-returning-NULLS] -

문제를 가지고있는 열을, Excel에서 파일을 여는 괜찮다면 열을 선택하고 할

데이터 -> 텍스트 나누기 -> 다음 -> 다음 -> 텍스트

저장 스프레드 시트 및 그들은 모두 내가 열, 대신 엑셀의 .CSV 파일을 사용하여 발견 한 OPENROWSET

에서 텍스트로 와야한다 링크 된 서버 설정, schema.ini에있는 파일의 형식을 이와 같이 가져 오기를 처리하는보다 실용적인 방법으로 설정하면 해당 방법으로 각 열의 형식을 명시 적으로 선택할 수 있습니다.