博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQL Server:把CSV文件导入到SQL Server表中
阅读量:6579 次
发布时间:2019-06-24

本文共 938 字,大约阅读时间需要 3 分钟。

有时候我们可能会把CSV中的数据导入到某个数据库的表中,比如做报表分析的时候。 

对于这个问题,我想一点也难不倒程序人员吧!但是要是SQL Server能够完成这个任务,岂不是更好! 
对,SQL Server确实有这个功能。 
首先先让我们看一下文件,该文件保存在我的D:盘下,名为csv.txt,内容是: 
   
现在就是SQL Server的关键部分了;

我们使用的是SQL Server的BULK INSERT命令,关于该命令的详细解释,请点击; 

我们先在SQL Server中建立用于保存该信息的一张数据表, 
  CSVTable( 
Name (), 
Email (), 
Area NVARCHAR(MAX) 
然后执行下面的语句:

CSVTable 'D:\csv.txt'(	FIELDTERMINATOR = ',',	ROWTERMINATOR = '\n') *  CSVTable
按F5,执行结果如下:

怎么样?是不是比用程序简单! 

但是现在有几个问题需要考虑一下:

1,CSV文件中有的列值是用双引号,有的列值则没有双引号: 

  
如果再次运行上面的语句,得到结果就和上一个结果不同了: 
  
其中有的列就包含双引号了,这应该不是我们想要的结果,要解决这个问题,我们只能利用临时表了,先把CSV导入到临时表中,然后在从这个临时表中导入到最终表的过程中把双引号去掉。 
2,CSV文件的列值全部是由双引号组成的: 
  
这个问题要比上一个稍微复杂点,除了要先把CSV文件导入到临时表中,还必须修改一下在把CSV文件导入到临时表的代码: 
 
注意圈中的部分。 
3,CSV文件的列要多于数据表的列: 
  
而我们的数据表只有三列,如果在执行上面的导入代码,会产生什么结果呢? 
结果就是: 
 
它把后边的全部放在了Area列中了,要处理这个问题,其实也很简单,就是我们把我们想要的列值在数据表中都按顺序建立一列,而把不需要的列值,也在数据表中建立一个,只不过只是一个临时列,在把这个数据表导入到最终表的时候,忽略这个临时列就行了。 

--EOF--

Author:兴百放

Web:

Time:2010.3.14

转载于:https://www.cnblogs.com/monian/p/3651825.html

你可能感兴趣的文章
十个你可能知道,但容易错的PCB设计。
查看>>
Python网络爬虫是什么?学完Python后可以从事什么职业
查看>>
如何在Linux 中获取硬盘分区或文件系统的UUID?
查看>>
Jmeter + Grafana搭建实时监控可视化
查看>>
互联网创业之门 — 设计师。
查看>>
MySQL高性能优化规范建议
查看>>
在XP和win7上添加UltraEdit到鼠标右键菜单
查看>>
不要让临时表空间影响Oracle数据库性能
查看>>
我的友情链接
查看>>
Oracle DBA开发之:使用sql来查看buffer cache的使用情况
查看>>
PIE SDK元素的选择和取消选择
查看>>
STM32的待机与按键(闹钟)唤醒试验
查看>>
MAVEN 私有仓库库迁移
查看>>
关于C3P0连接池的使用——适合多数据源
查看>>
速达软件各版本及产品ID
查看>>
DOM(七)使用DOM控制表格
查看>>
【cocos2dx进阶】调试篇(1)基础介绍
查看>>
LINUX下多路径(multi-path)介绍及使用
查看>>
fedora wireshark中加入openflow的支持
查看>>
我的友情链接
查看>>