【问题标题】:Openrowset for excel: do not convert True/False to 1/0Openrowset for excel:不要将 True/False 转换为 1/0
【发布时间】:2017-11-29 11:59:17
【问题描述】:

我正在使用 Openrowset 导入具有“状态”列的 excel,其值可以是“TRUE/FALSE/CANCELLED”。我已经使用 TypeGuessRows=0 相应地设置了注册表。当 excel 文件中的“状态”列包含“TRUE/FALSE/CANCELLED”值时,按预期将其作为文本值导入。

但是这里有问题,当它只包含“TRUE/FALSE”时,导入的值变成“1”和“0”。所以导入几个excel文件后,我的sql表列的值为“TRUE, FALSE, CANCELLED, 1, 0”。如何告诉 sql server 始终导入为文本而不自动将 TRUE/FALSE 转换为 1/0?我不想写一个愚蠢的 sql 语句来将 1/0 更新回 TRUE/FALSE。 请问还有什么解决办法吗?

【问题讨论】:

    标签: sql-server excel


    【解决方案1】:

    仅当您在特定文件中只有 TRUE 或 FALSE 值时才会出现此问题(因为在这种情况下,即使在遍历所有行之后也无法知道实际数据类型)。 (如果您在导入的文件中有可用的标题,您可以设置 TypeGuessRows=1 仅从顶行猜测数据类型)

    解决问题的方法之一是打开 Excel,选择列(使用 TRUE/FALSE),右键单击并从弹出菜单中选择“设置单元格格式...”。在数字选项卡下,选择文本作为类别。点击确定。

    另一种方法是在插入后立即更新行。

    谢谢。

    【讨论】:

    • 不幸的是,MS 没有提供官方方法来禁用从 TRUE/FALSE 到 1/0 的自动转换。由于有复杂的 excel 文件,我必须根据需要设置 TypeGuessRows=0。更改单元格的格式是一种解决方案,尽管它需要重新定义列的额外步骤。但它没有使用“格式化单元格...”。相反,它应该使用数据组下的“文本到列”并将列定义为文本,以使其完美运行。
    猜你喜欢
    • 2019-12-28
    • 2014-01-17
    • 1970-01-01
    • 2011-12-16
    • 2018-04-02
    • 2013-04-25
    • 1970-01-01
    • 2019-01-06
    • 1970-01-01
    相关资源
    最近更新 更多