首页 > 解决方案 > SQL Server OPENROWSET Numeric vales 更改为 int

问题描述

我的 SQL Server 2008 R2 OPENROWSET 在读取 csv 文件时遇到问题。

从 csv 文件读取时,它会自动将数值转换为 int。

我有一个 csv 文件,其中 ColumnA 列有 30 行。

在此处输入图像描述

这是我的代码

declare @SysFilepath as varchar(max)
set @SysFilepath='C:\Users\rtdev1\Desktop\'
declare @SysFilename as varchar(max)
set @SysFilename='Test.csv' 

 declare @str as varchar(max)=''                                                         
 set @str='SELECT *  FROM OPENROWSET(''Microsoft.ACE.OLEDB.12.0'',  
 ''Text;Database='+@SysFilepath+';HDR=yes'',''select * from ['+@SysFilename+']'')'
 exec(@str)

我的任何结果如下。

在此处输入图像描述

5.654 值更改为 5,0.25475 值更改为 0。

如果列的 int 值超过 25 行,则列数据类型会自动更改。

谁能帮忙解决一下。

谢谢。

标签: sql-serversql-server-2008sql-server-2008-r2openrowset

解决方案


现在将代码更改为批量插入后,我可以获得正确的结果。

create table #CSVLine
(
  ColumnA   VARCHAR(MAX)
)

declare @Sql as varchar(max)
declare @InputFile as varchar(max)
set @InputFile = 'E:\MyPath\MyFile.csv'
declare @FirstLine int
set @FirstLine =1

SET @Sql = 'BULK INSERT #CSVLine
 FROM ''' + @InputFile + '''
 WITH
 (
    FIRSTROW=' + CAST(@FirstLine as varchar) + ',
    FIELDTERMINATOR = '','',
    ROWTERMINATOR = ''\n''
 )

 select * from #CSVLine'

 EXEC(@sql)

谢谢@Jeroen Mostert


推荐阅读