类型:浏览助手大小:5.2M语言:中文评分:10.0标签:立即下载。因为工作需要,最近在做数据分析和数据迁移。在进行数据迁移时,需要将原始数据导入新建的数据库。本来,这种简单的数据导入和导出是没有问题的,但是客户的所有原始数据都存储在。dat文件。所以解决方案如下
1.首先,使用数据库系统实用程序查看原始文件。客户提供的dat文件。并将数据文件中的数据导出为。txt文件。
第二,这是今天的关键部分。在数据库中构建我们的表结构是这样的
创建表测试(标识内部标识(1,1)主键,名称非空值(20),性别非空值(2),工作位)
表格结构如图
下面我们可以通过下面简单的SQL语句实现数据的批量导入,代码如下:
批量插入测试
来自' C: 用户OliveDesktoptest.txt '
随着
(fieldterminator=',',
rowterminator='n '
)
注意:1)批量插入是Sql server中的批量插入操作;2)test是上面定义的表,也就是我们的数据将要插入的表;3)' c : Users Olive Desktop test . txt '是数据源文件所在磁盘上的物理路径;4)with相当于一些插入条件。您可以在这里添加一些约束等。5 5) fieldterminator=',',field的分隔符是","一般txt文本数据源的字段分隔符是逗号,但也可以是其他,如" |" 6 |"6) rowterminator='n'n '每条信息之间的分隔符是' n ',一般txt文本数据源的信息之间的分隔符是换行符,即一
三、执行结果1)执行前,test.txt文本文档的数据如下:执行后,sql server中的数据如下
第四,批量插入详细说明
这里我们只讲一下大容量插入的用法,因为涉及到的表的结构比较简单,表之间的相关性也不是很大,所以我们简单的使用大容量插入。其实大容量插入的功能是相当强大的。如上所述,一些参数可以添加到with{}条件中,以满足不同的需求。让我们来看看微软官方对使用批量插入的介绍
批量插入[数据库名。[ schema_name ]。|架构名称。][table _ name | view _ name]FROM ' data _ file '[WITH([,] BATCHSIZE=batch_size ][,] CHECK_CONSTRAINTS ][,]CODEPAGE={ ' ACP ' | ' OEM ' | ' RAW ' | ' code _ page ' }][,]data filetype={ ' char ' | ' native ' | ' wide char ' | ' wide native ' }][,]field terminator=' field _ terminator '][,] FIRSTROW=first_row ][,] FIRE_TRIGGERS ][,] FORMATFILE ] KEEPNULLS ][,]KBYES _ PER _ BATCH=KBYES _ PER _ BATCH][,] LASTROW=last_row ][,] MAXERRORS=max_errors ][,] ORDER ({ column [ ASC | DESC ] } [,n ] ) ][,]ROWS _ PER _ BATCH=ROWS _ PER _ BATCH][,]ROWDENTER=' ROW _ DENTER '][,] TABLOCK ][,]ERRORTFILE=' FIle _ name '])]
这里我们主要看一下中的一些参数:(部分)
1) BATCHSIZE:指定批处理中的行数
2)CHECK _ constraints 3360启用约束检查,指定在大容量导入操作期间必须检查目标表或视图上的所有约束。如果没有CHECK_CONSTRAINTS选项,所有CHECK和FOREIGN KEY约束都将被忽略,并且表的约束在操作后被标记为不可信。唯一、主键和非空约束总是被强制执行。
3) FIRE_TRIGGERS指定目标表中定义的所有插入触发器都将在大容量导入操作期间执行。如果为目标表上的INSERT操作定义了触发器,则每次批处理操作完成时都会触发该触发器。
4) KEEPNULLS指定空列应该在大容量导入操作期间保持Null值,而不插入任何列的默认值
5)订单({列[ASC | desc]} [,n])指定如何对数据文件中的数据进行排序。根据表中的聚集索引(如果有)对要导入的数据进行排序可以提高批量导入的性能
6) ERRORFILE='file_name '指定用于收集格式不正确且无法转换为OLE DB行集的行的文件。这些行按原样从数据文件复制到此错误文件。