Sql openrowset for excel:我们可以跳过几行吗?

Sql openrowset for excel:我们可以跳过几行吗?,sql,sql-server,openrowset,Sql,Sql Server,Openrowset,我将使用以下sql从excel读取数据,但有时我需要跳过前几行。e、 实际数据从第5行开始,所以我需要跳过前4行,这可行吗 SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;HDR=YES;Database=c:\daniel\test.xls', 'SELECT * FROM [sheet1$]'); 这将对获得的行进行编号,没有特定的顺序(幸运的话): 如果您认为合适,您可能希望通过如下更改r

我将使用以下sql从excel读取数据,但有时我需要跳过前几行。e、 实际数据从第5行开始,所以我需要跳过前4行,这可行吗

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

这将对获得的行进行编号,没有特定的顺序(幸运的话):

如果您认为合适,您可能希望通过如下更改
rownum
定义来指定某些顺序:

ROW_NUMBER() OVER (ORDER BY specific_column_list) AS rownum
ROW_NUMBER()(按特定列列表排序)作为rownum

使用范围[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]'
);

这将减慢执行row_number()的ETL过程。我不确定sql server是否可以并行加载数据,如果rownum不能反映文件中的位置,例如线程1加载前100行,线程2加载第二100行,那么第二100行可能首先加载到database@Daniel吴:那么我们得到了什么?有了一个有序的行号,这个过程很可能会减慢,是的。无序的一个很可能分配的行号与excel工作表中实际的行顺序不同。所以在这种情况下,我的答案几乎完全是垃圾。对不起,看来我暂时没有你的选择了。如果是这样的话:您能给原始excel文档中的行编号吗?也就是说,添加一个列,其中的值表示实际的行号,这样您就可以在SQL中对其进行筛选。这样做是否可以排除最后五行,其中总行数每次都会更改?我的Excel电子表格有页脚文本,总是从最后一个结果行之后的一行开始,持续五行。但行数总是不同的。当前,如果尝试导入页脚文本,则会中断导入,因为它确实符合数据类型等。
SELECT *
FROM OPENROWSET(
    'Microsoft.ACE.OLEDB.12.0',
    'Excel 12.0;HDR=YES;Database=c:\daniel\test.xls',
    'SELECT * FROM [sheet1$A5:Z]'
);