我在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行,则列数据类型会自动更改。
任何人都可以帮忙解决。
感谢。
答案 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