Sql server 在ms sql server大容量插入期间向数据添加十进制数
下面是我正在处理的场景: 我正在处理从外部来源提供给我的数据。基本上,数据库定义有一个numeric(9,3)类型的列 已提供csv文件,对于上面指定的列,所有数据的形式如下:Sql server 在ms sql server大容量插入期间向数据添加十进制数,sql-server,csv,formatting,decimal-point,Sql Server,Csv,Formatting,Decimal Point,下面是我正在处理的场景: 我正在处理从外部来源提供给我的数据。基本上,数据库定义有一个numeric(9,3)类型的列 已提供csv文件,对于上面指定的列,所有数据的形式如下: 000100000 000001000 000002000 001000000 所以本质上发生的事情是,我自己插入小数点,以便将这些值转换为 000100.000 000001.000 000002.000 001000.000 我自己在c#中使用基本的文本文件操作将所有小数添加到值中。有没有办法告诉sql serv
000100000
000001000
000002000
001000000
所以本质上发生的事情是,我自己插入小数点,以便将这些值转换为
000100.000
000001.000
000002.000
001000.000
我自己在c#中使用基本的文本文件操作将所有小数添加到值中。有没有办法告诉sql server在大容量插入操作期间默认情况下在第三个位置插入一个小数点?在这种情况下,您需要使用临时表,将数据以原始形式加载到表中,然后将其移动到目标表中,并将每行的值除以1000。当然,如果你有不同的格式,比如4位数字,那么你可以除以10000,以此类推。我知道这是一篇较老的文章,但我在试图解决完全相同的问题时遇到了它。我想出了一个一步完成的方法,避免了登台,所以我想和大家分享一下 您可以使用
OPENROWSET
,而不是使用BULK INSERT
命令,并提供列别名,然后在select中使用
首先,您需要一个格式文件来定义列:
...
...
...
...
请注意,我们将字段定义为INT
。然后,您可以使用OPENROWSET
读取文件的内容:
INSERT INTO dbo.my_table
SELECT
...,
**my_numeric_field/1000**,
...
FROM OPENROWSET(
BULK 'C:\my_file.txt',
FORMATFILE = 'C:\FormatFiles\my_format_file.fmt'
) AS e (...,**my_numeric_field**,...)
请注意,我们为每个列指定了列别名。现在,在将插入到具有数字或十进制列的表中的select中,您可以使用别名并对其应用其他逻辑,例如除以1000以获得所需的结果。您可以在SSIS中执行此操作,正如我几天前指出的:不是在大容量插入期间,不是。您可以在后续命令中执行此操作。