【问题标题】:Import datatype DECIMAL from CSV to SQL server将数据类型 DECIMAL 从 CSV 导入 SQL Server
【发布时间】:2014-02-10 07:03:45
【问题描述】:

在将 file.csv 导入到 sql server 2008 时,我遇到了问题。

在我的 file.csv 中,小数点是这样写的:(例如 1234,34112)并且 SQL 服务器似乎不将“,”理解为小数点。

我的解决方案是使用 BULK INSERT 作为 VARCHAR 将其导入,然后将其转换为十进制。它有效,但我想这可能是我无法获得的更好的解决方案。

你能帮我解决这个问题吗?

提前致谢

【问题讨论】:

  • 对答案没有足够的信心,但可能带有 -R 开关的 BCP 将适用于您的区域设置。 BCP:technet.microsoft.com/en-us/library/ms162802.aspx
  • 就个人而言,我几乎总是将数据加载到字符临时表中,然后在数据库中进行转换。我发现它使调试变得更加容易,并且通常加快了数据导入的过程。所以,你的方法很好。

标签: sql-server bulkinsert sqldatatypes


【解决方案1】:

只有两种方法可以做到这一点,一种你已经提到在 Sql server 中导入,然后做这样的事情..

CREATE Table ImportTable (Value NVARCHAR(1000))   --<-- Import the data as it is
INSERT INTO @TABLE VALUES
('1234,34112'),('12651635,68466'),('1234574,5874')

  /* Alter table add column of NUMERIC type.
     And update that column something like this... 
   */

UPDATE ImportTable 
SET NewColumn =  CAST(REPLACE(Value , ',', '.') AS NUMERIC(28,8)) 

或者您可以在导入之前将其更改为您的 Excel 工作表。

除非您使用 SSIS 导入数据,否则最好使用丢失数据类型在 Sql Server 1st 中获取数据,然后在需要时进行任何数据操作。

【讨论】:

  • 感谢您的回答。 :)
【解决方案2】:

SQL Server Management Studio 17 提供了一个新的直接选项来导入平面文件,为您处理十进制 csv 列的导入。右键您的数据库,然后单击任务 > 导入平面文件...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-13
    • 2010-12-26
    • 1970-01-01
    • 2017-01-16
    • 2021-08-13
    • 1970-01-01
    • 2021-04-04
    • 1970-01-01
    相关资源
    最近更新 更多