SQL Server OPENROWSET数字值更改为int

时间:2018-05-25 11:01:06

标签: sql-server sql-server-2008 sql-server-2008-r2 openrowset

我在SQL Server 2008 R2 OPENROWSET中遇到问题,无法读取csv文件。

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

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

enter image description here

这是我的代码

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)

我的结果如下。

enter image description here

5.654值更改为5且0.25475值更改为0.

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

任何人都可以帮忙解决。

感谢。

1 个答案:

答案 0 :(得分:0)

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

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