2011-02-08 3 views
11

다음 SQL을 사용하여 Excel에서 데이터를 읽지 만 처음에는 여러 행을 건너 뛸 때가 있습니다. 예를 들어 실제 데이터는 5 행에서 시작하므로 첫 번째 4 행은 건너 뛸 필요가 있습니다.openrowset for excel : 여러 행을 건너 뛸 수 있습니까?

SELECT * 
FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 
    'Excel 12.0;HDR=YES;Database=c:\daniel\test.xls', 
    'SELECT * FROM [sheet1$]'); 

답변

5

이 (운이있을 것 같은) 어떤 특정 순서로 행이 얻어진다 번호를 것입니다 : 당신이을 변경하여, 맞는 볼 경우

SELECT * 
FROM (
    SELECT *, ROW_NUMBER() OVER (ORDER BY (SELECT 1)) AS rownum 
    FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 
    'Excel 12.0;HDR=YES;Database=c:\daniel\test.xls', 
    'SELECT * FROM [sheet1$]') 
) s 
WHERE rownum > 4; 

당신은 어떤 순서를 지정할 수 있습니다 이런 rownum 정의 :

ROW_NUMBER() OVER (ORDER BY specific_column_list) AS rownum 
+0

ETL 프로세스가 row_number()를 수행하는 속도를 늦 춥니 다. 그리고 SQL 서버가 병렬로 데이터를로드 할 수 있는지 여부를 확신 할 수 없으므로 rownum이 파일의 위치를 ​​반사하지 못하게됩니다. 예를 들어 스레드 1은 처음 100 행을로드하고 스레드 2는 두 번째 100 행을로드 할 수 있습니다. 두 번째 100 행이 먼저 데이터베이스에로드되었습니다. –

+0

@ 대니얼 우 : 그래서 우리가 무엇을 얻었습니까? 순서가 지정된 ROW_NUMBER 일 경우 처리 속도가 느려질 가능성이 큽니다 (예). 그리고 순서가 지정되지 않은 행은 Excel 시트의 실제 행 순서와 다르게 행 번호를 할당 할 가능성이 큽니다. 그래서이 상황에서 제 대답은 거의 완전히 쓰레기가됩니다. 미안하지만 당분간 당신을위한 옵션이 부족한 것 같습니다. 이 경우에만 : 원래 엑셀 문서의 행 번호를 매길 수 있습니까? 즉, 실제 행 번호를 나타내는 값이있는 열을 추가하여 SQL에서 필터 할 수 있습니다. –

16

사용 범위 [시트 1을 $의 A5 : Z 대신 전체 시트의 [시트 1 $]

SELECT * 
FROM OPENROWSET(
    'Microsoft.ACE.OLEDB.12.0', 
    'Excel 12.0;HDR=YES;Database=c:\daniel\test.xls', 
    'SELECT * FROM [sheet1$A5:Z]' 
); 
+0

총 행 수가 매번 변경되는 마지막 다섯 개의 행을 제외하려면이 작업을 수행 할 수 있습니까? 내 Excel 스프레드 시트에는 마지막 결과 행 다음에 항상 한 행으로 시작하고 다섯 행으로 이동하는 바닥 글 텍스트가 있습니다. 그러나 행의 수는 항상 달라집니다. 현재 바닥 글 텍스트를 가져 오려고하면 데이터 유형 등을 따르기 때문에 가져 오기가 중단됩니다. – TravisPUK

관련 문제