TSQL中的OpenRowSet命令返回NULLS

现在调查了一会儿,并不断碰到一堵砖墙。 我正在通过OpenRowset命令从xls文件导入临时表。 现在我有一个问题,我试图导入某个列有一个范围值,但最常见的是以下几点。 列结构为长数字,即15598和一些列作为string,即15598-E。

现在openrowset正在读取string版本没问题,但报告数字版本为NULL。 我阅读( http://www.sqldts.com/254.aspx)openrowset有这个问题,作者说在查询string中实现“HDR = YES; IMEX = 1”,但这根本不适用于我。

有没有人遇到过这个?

只是一些更多的信息以及。 我可能不会使用JET引擎(Microsoft.Jet.OLEDB.4.0)做到这一点,所以这是我的查询看起来像:

SELECT * FROM OPENROWSET('MSDASQL' , 'Driver=Microsoft Excel Driver (*.xls);HDR=YES;IMEX=1;DBQ=C:\ImportFile.xls;' , 'SELECT * FROM [Sheet1$]') 

我注意到您正在使用Excel ODBC驱动程序。 你有没有尝试与等效连接string的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链接,它build议的registry值是我的机器上,我从来没有改变的默认值。 我自己多次使用了上述方法,没有任何问题。 也许这是一个环境问题?

如果您不介意在Excel中打开文件,请select出现问题的列,然后select该列

数据 – >文本到列 – >下一个 – >下一个 – >文本

保存电子表格,它们都应该以OPENROWSET中的文本forms出现

我发现使用.CSV文件而不是Excel,通过设置链接服务器打开,并在schema.ini中设置文件的格式是一种更实用的方法来处理像这样的导入,使用该方法,您可以明确地select每个文件列的格式。

我们遇到了同样的问题。 不幸的是,我们还没有find解决scheme。 这里有更多的信息表明可能有一个registry修复程序。

我有同样的问题。 我修剪它,粘贴一行,其中包含一个string/数值的列(例如123ABC)在工作表的第一行位置。 出于某种原因,T-SQL读取第一行,并假定所有值都是数字。

响应SqlACID在这个链接工作很好[ https://wikigurus.com/Article/Show/185717/OpenRowSet-command-in-TSQL-is-returning-NULLS%5D : –

如果您不介意在Excel中打开文件,请select出现问题的列,然后select该列

数据 – >文本到列 – >下一个 – >下一个 – >文本

保存电子表格,它们都应该以OPENROWSET中的文本forms出现

我发现使用.CSV文件而不是Excel,通过设置链接服务器打开,并在schema.ini中设置文件的格式是一种更实用的方法来处理像这样的导入,使用该方法,您可以明确地select每个文件列的格式。