mysql导入多个txt_Sqlserver使用BULK同时导入多个txt、csv文件

BULK语句基础

BULK有很多参数,但是常用的只有几个,下面简单介绍一下

bulk insert [DatabaseName].[dbo].[table] from 'C:\data.txt'

with(

FIRSTROW =1, --指定要加载的第一行的行号。默认值是指定数据文件中的第一行

CODEPAGE=''936'', --数据库中的编码类型

FIELDTERMINATOR='','', --分隔符

ROWTERMINATOR='/n' --换行符

)

代码行中的命名规则

下面代码均使用该命名规则!!!

[DatabaseName].[dbo].[table] 指的是某个数据库中的表的名字

C:\ 指的是文件所在路径,例:C:\Program Files\ 指的是在C盘Program Files文件夹里的文件

data.txt 指的是所需导入文件的名称

FIRSTROW 属性

指定要加载的第一行的行号。默认值是指定数据文件中的第一行。FIRSTROW 从 1 开始。

注意:FIRSTROW 属性不可用于跳过列标题。 BULK INSERT 语句不支持 跳过标题。 跳过行时, SQL Server 数据库引擎只考虑字段终止符,而不会对所跳过行的字段中的数据进行验证。

CODEPAGE属性

是数据库的编码类型。若导入数据库的中文数据是乱码,往往与这个有关!!!

常用编码类型:

编码

编码含义

936

简体中文GBK

65001

UFT-8

FIELDTERMINATOR属性

标识分隔内容的符号。一般csv的分隔符是“,”,txt的话可能是空格或者其他符符号比如“ | ”。

ROWTERMINATOR属性

标识分隔行的符号 ,即换行符

常见换行符:

换行符

含义

常见显示

0x0D

指的是“回车”

\r

0x0A

指的是“换行”

\n

0x0D + 0x0A

回车换行

\r\n

char(13)

指的是“回车”

\r

char(10)

指的是“换行”

\n

BULK语法中全部参数如下:

BULK INSERT

[ database_name . [ schema_name ] . | schema_name . ] [ table_name | view_name ]

FROM 'data_file'

[ WITH

(

[ [ , ] BATCHSIZE = batch_size ] --BATCHSIZE指令来设置在单个事务中可以插入到表中的记录的数量

[ [ , ] CHECK_CONSTRAINTS ] --指定在大容量导入操作期间,必须检查所有对目标表或视图的约束。若没有 CHECK_CONSTRAINTS 选项,则所有 CHECK 和 FOREIGN KEY 约束都将被忽略,并且在此操作之后表的约束将标记为不可信。

[ [ , ] CODEPAGE = { 'ACP' | 'OEM' | 'RAW' | 'code_page' } ] --指定该数据文件中数据的代码页

[ [ , ] DATAFILETYPE =

{ 'char' | 'native'| 'widechar' | 'widenative' } ] --指定 BULK INSERT 使用指定的数据文件类型值执行导入操作。

[ [ , ] FIELDTERMINATOR = 'field_terminator' ] --标识分隔内容的符号

[ [ , ] FIRSTROW = first_row ] --指定要加载的第一行的行号。默认值是指定数据文件中的第一行

[ [ , ] FIRE_TRIGGERS ] --是否启动触发器

[ [ , ] FORMATFILE = 'format_file_path' ]

[ [ , ] KEEPIDENTITY ] --指定导入数据文件中的标识值用于标识列

[ [ , ] KEEPNULLS ] --指定在大容量导入操作期间空列应保留一个空值,而不插入用于列的任何默认值

[ [ , ] KILOBYTES_PER_BATCH = kilobytes_per_batch ]

[ [ , ] LASTROW = last_row ] --指定要加载的最后一行的行号

[ [ , ] MAXERRORS = max_errors ] --指定允许在数据中出现的最多语法错误数,超过该数量后将取消大容量导入操作。

[ [ , ] ORDER ( { column [ ASC | DESC ] } [ ,...n ] ) ] --指定数据文件中的数据如何排序

[ [ , ] ROWS_PER_BATCH = rows_per_batch ]

[ [ , ] ROWTERMINATOR = 'row_terminator' ] --标识分隔行的符号

[ [ , ] TABLOCK ] --指定为大容量导入操作持续时间获取一个表级锁

[ [ , ] ERRORFILE = 'file_name' ] --指定用于收集格式有误且不能转换为 OLE DB 行集的行的文件。

)]

ps.根本看不下去,具体使用方法点击下方的链接参考官方文档。

现在我们来看如何导入表

步骤1 创建表结构

通过BULK方式导入数据,首先需要数据库里有该表的空的表结构。

这时可以通过create table语句创建,也可以用Excel文件复制个表头,手动导入表结构。

比如说创建好表结构的空表为:[dbo].[table]

步骤2 执行代码

CSV

导入单个csv

DECLARE @bulk_cmd nvarchar(1000)

SET @bulk_cmd = 'BULK INSERT [DatabaseName].[dbo].[table] ' +

'FROM '+'''C:\data.csv'''+'WITH (FIELDTERMINATOR = '','',CODEPAGE=''936'',FIRSTROW=1,ROWTERMINATOR = '''+char(10)+''')'

EXEC(@bulk_cmd)

go

循环导入多个csv

循环导入的逻辑是把CSV文件的文件名改成 data(1).csv,data(2).csv…data(18).csv的形式,放入循环中,循环执行上面的单个csv文件导入的命令。

declare @n int,@filename varchar(255),@sql varchar(1000)

set @n=1

while @n<=18

begin

set @filename='data('+ltrim(rtrim(str(@n)))+').csv'

print @filename

set @sql='bulk insert [DatabaseName].[dbo].[table] from ''C:\'+@filename+'''

with (FIRSTROW =1,CODEPAGE=''936'',FIELDTERMINATOR = '','',ROWTERMINATOR = '''+CHAR(10)+''')'

print @sql

exec(@sql)

set @n=@n+1

end

TXT

导入单个txt

truncate table [dbo].[PINGZHENG201702]

DECLARE @bulk_cmd nvarchar(1000)

SET @bulk_cmd = 'BULK INSERT [DatabaseName].[dbo].[table] ' +

'FROM '+'''C:\文件名.txt'''+'WITH (FIELDTERMINATOR = '','',CODEPAGE=''936'',FIRSTROW=1,ROWTERMINATOR = '''+char(10)+''')'

EXEC(@bulk_cmd)

go

循环导入多个txt

循环导入的逻辑是把TXT文件的文件名改成 data(1).txt,data(2).txt…data(18).txt的形式,放入循环中,循环执行上面的单个txt文件导入的命令。

declare @n int,@filename varchar(255),@sql varchar(1000)

set @n=10

while @n<=12

begin

set @filename='data('+ltrim(rtrim(str(@n)))+').txt'

print @filename

set @sql='bulk insert [DatabaseName].[dbo].[table] from ''C:\'+@filename+'''

with (FIRSTROW =1,CODEPAGE=''936'',FIELDTERMINATOR = ''|'',ROWTERMINATOR=''0x0A'')'

print @sql

exec(@sql)

set @n=@n+1

end

升级版已经发布,可以在不改文件名的前提下,直接导入文件夹内所有文件 详情请点击

勇者无惧,强者无敌

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值