Openrowset для excel: можем ли мы пропустить несколько строк?

Я буду использовать следующий 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$]');

Ответ 1

Используйте диапазон [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]'
);

Ответ 2

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

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