【问题标题】:sql server: can i insert a $ into a money fieldsql server:我可以在货币字段中插入$吗
【发布时间】:2010-10-08 19:53:20
【问题描述】:

我正在将“$5.99”之类的值(或尝试插入)插入到money 字段中。它不喜欢美元符号

我实际上是从 csv 文件进行批量插入。 csv 文件中的一列包含 money 并带有美元符号

您能帮我弄清楚如何使用$ 登录到money 字段中进行批量插入吗?

Msg 4864, Level 16, State 1, Line 1
Bulk load data conversion error (type mismatch or invalid character for the specified codepage) for row 1, column 2 (pricepaid).

我如何摆脱这个标志?

【问题讨论】:

    标签: sql sql-server etl


    【解决方案1】:

    基于这个问题,以及您之前的问题herehere,我建议您将批量插入到临时保留表中,您可以在其中将“货币”字段定义为 varchar .然后编写另一个 SQL 语句将数据从持有表移动到真实表。在此 SQL 语句中,您可以跳过不需要的列,从“金钱”字段中删除“$”并将其转换为金钱数据类型,等等。

    【讨论】:

      【解决方案2】:

      不,您不能在货币字段中插入货币符号。

      它实际上只是一个带有友好名称的小数 (19,4)。

      【讨论】:

      • 那么解决方案是什么?
      • 是否可以在数据进入数据库之前通过 BULK INSERT 格式化数据?
      • 您是否需要将此过程设为可重复的过程?如果没有,也许只是事先在 MS Excel 中操作 CSV 以删除货币符号?
      • 我确实需要让它可重复!
      • 然后我会选择 adrift 和 Joe Stefanelli 建议的临时表选项。
      【解决方案3】:

      作为一种解决方法,您可以创建一个与您的目标具有相同架构的表,使用 varchar 列而不是 money,然后批量插入其中。然后更新导入的表,去掉'$',把数据复制到原来的目标。

      【讨论】:

        【解决方案4】:

        你不能,Money 只是一种数字类型,其灵活性比十进制稍差。要使用符号存储,您必须使用 varchar

        【讨论】:

        • 是否可以在数据进入数据库之前使用 BULK INSERT 格式化数据?
        • 我个人会使用 Joe Stefanelli 的建议
        【解决方案5】:

        其他人建议使用临时表。如果您使用临时表来保存 CSV 文件中的原始数据,您应该能够从包含 $ 字符的 VarcharChar 字段直接转换为 Money(即,不删除它)。

        这在 SQL 2008 中对我有用。

        【讨论】:

        • 不知何故,这并不让我感到惊讶。我认为这是一个有效的答案,因为 jenny 以“SQL Server 2008”作为其他问题的开头。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-12-11
        • 2011-10-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多