openrowset for excel: можем ли мы пропустить несколько строк? - PullRequest
11 голосов
/ 08 февраля 2011

Я буду использовать следующий sql для чтения данных из Excel, но иногда мне нужно пропустить первые несколько строк.Например, реальные данные начинаются со строки 5, поэтому мне нужно пропустить первые 4 строки, это выполнимо?

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

Ответы [ 2 ]

16 голосов
/ 18 января 2012

Используйте диапазон [sheet1 $ A5: Z] вместо всего листа [sheet1 $]

SELECT *
FROM OPENROWSET(
    'Microsoft.ACE.OLEDB.12.0',
    'Excel 12.0;HDR=YES;Database=c:\daniel\test.xls',
    'SELECT * FROM [sheet1$A5:Z]'
);
5 голосов
/ 08 февраля 2011

Это будет нумерация строк, которые будут получены, без определенного порядка (если повезет, если это будет):

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 <i>specific_column_list</i>) AS rownum
...