SQL 中的 OpenRowSet 命令返回 NULLS

Posted

技术标签:

【中文标题】SQL 中的 OpenRowSet 命令返回 NULLS【英文标题】:OpenRowSet command in TSQL is returning NULLS 【发布时间】:2009-08-26 12:26:30 【问题描述】:

现在调查了一段时间,一直碰壁。我通过 OpenRowset 命令从 xls 文件导入临时表。现在我有一个问题,我正在尝试导入具有范围值的某个列,但最常见的是以下。列结构为长数字,即 15598,一些列为字符串,即 15598-E。

现在 openrowset 正在读取字符串版本没有问题,但将数字版本报告为 NULL。我读到 (http://www.sqldts.com/254.aspx) openrowset 有这个问题,作者谈到在查询字符串中实现“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$]')

【问题讨论】:

现在您知道为什么 ETL 人讨厌 Excel 进行导入! 【参考方案1】:

我注意到您正在使用 Excel ODBC 驱动程序。您是否尝试过具有等效连接字符串的 JET OLEDB Provider?

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 链接,它推荐的注册表值是我机器上的默认值,我从未更改过。我自己多次使用上述方法都没有问题。可能是环境问题?

【讨论】:

没问题,查看***.com/questions/1178243/…了解更多信息 +1。发布一年后,它为我解决了同样的问题。【参考方案2】:

如果您不介意在 Excel 中打开文件,请取出有问题的列,选择该列,然后执行

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

保存电子表格,它们应该都以文本形式出现在 OPENROWSET 中

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

【讨论】:

【参考方案3】:

我们遇到了同样的问题。不幸的是,我们也没有找到解决方案。有更多信息here 表明可能存在注册表修复。

【讨论】:

【参考方案4】:

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

【讨论】:

【参考方案5】:

SqlACID 在此链接中的响应效果很好 [https://wikigurus.com/Article/Show/185717/OpenRowSet-command-in-TSQL-is-returning-NULLS] :-

如果您不介意在 Excel 中打开文件,请取出有问题的列,选择该列,然后执行

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

保存电子表格,它们应该都以文本形式出现在 OPENROWSET 中

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

【讨论】:

以上是关于SQL 中的 OpenRowSet 命令返回 NULLS的主要内容,如果未能解决你的问题,请参考以下文章

sql MS SQL OpenRowSet和OpenDataSource示例

SQL的OPENROWSET开启和使用方法

使用OPENROWSET爆破SQL Server密码

Polybase 外部表与 OPENROWSET 无服务器 sql 池架构

SQL Server 使用 OPENROWSET 导出到 Excel

使用 OPENROWSET 将 SQL 结果导出到 Excel,但提供程序尚未注册