TSQL中的OpenRowSet命令返回空值
我已经调查了一段时间了,一直在碰壁。我正在通过OpenRowset命令将xls文件导入临时表。现在我遇到了一个问题,我试图导入某个列,该列有一个范围值,但最常见的是以下列。列结构为长数字,即15598,而某些列结构为字符串,即15598-e 现在openrowset读取字符串版本没有问题,但是将数字版本报告为空。我读到()openrowset有这个问题,作者谈到在查询字符串中实现“HDR=YES;IMEX=1”,但这对我根本不起作用 你们当中有人遇到过这种情况吗 还有更多的信息。我可能无法使用JET引擎(Microsoft.JET.OLEDB.4.0)执行此操作,因此我的查询如下所示:TSQL中的OpenRowSet命令返回空值,tsql,excel,import-from-excel,openrowset,Tsql,Excel,Import From Excel,Openrowset,我已经调查了一段时间了,一直在碰壁。我正在通过OpenRowset命令将xls文件导入临时表。现在我遇到了一个问题,我试图导入某个列,该列有一个范围值,但最常见的是以下列。列结构为长数字,即15598,而某些列结构为字符串,即15598-e 现在openrowset读取字符串版本没有问题,但是将数字版本报告为空。我读到()openrowset有这个问题,作者谈到在查询字符串中实现“HDR=YES;IMEX=1”,但这对我根本不起作用 你们当中有人遇到过这种情况吗 还有更多的信息。我可能无法使用J
SELECT *
FROM
OPENROWSET('MSDASQL'
, 'Driver=Microsoft Excel Driver (*.xls);HDR=YES;IMEX=1;DBQ=C:\ImportFile.xls;'
, 'SELECT * FROM [Sheet1$]')
我们遇到了同样的问题。不幸的是,我们也没有找到解决办法。有更多信息表明可能存在注册表修复。我注意到您正在使用Excel ODBC驱动程序。您是否尝试过使用等效连接字符串的JET OLEDB提供程序
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链接,它建议的注册表值是我机器上的默认值,我从未更改过。我自己已经多次使用上述方法,没有任何问题。可能是环境问题?如果您不介意在Excel中打开该文件,请选择有问题的列,选择该列,然后执行以下操作 数据->文本到列->下一步->下一步->文本 保存电子表格,它们应全部以文本形式出现在OPENROWSET中
我发现使用.CSV文件而不是Excel,通过设置链接服务器打开,并在schema.ini中设置文件的格式,这是处理此类导入的更实际的方法,使用这种方法,您可以显式选择每列的格式。我也有同样的问题。我修复了剪切和粘贴一行的问题,该行在工作表的第一行位置包含一列字符串/数值(例如123ABC)。出于某种原因,T-SQL读取第一行并假设所有值都是数字。SqlACID在该链接中的响应非常有效[:-
如果您不介意在Excel中打开该文件,请选择有问题的列,选择该列,然后执行以下操作 数据->文本到列->下一步->下一步->文本 保存电子表格,它们应全部以文本形式出现在OPENROWSET中
我发现使用.CSV文件而不是Excel,通过设置链接服务器打开,并在schema.ini中设置文件的格式,这是一种更实用的处理此类导入的方法,使用这种方法,您可以显式选择每列的格式。没问题,请查看更多信息+1。发布一年后,问题得到解决我也有同样的问题。现在你知道为什么ETL的人讨厌Excel的导入了!