【转载】Sqlserver使用BULK同时导入文件夹内所有txt、csv文件

之前写过一篇文章具体介绍如何使用bulk导入txt,csv文件,其中详细介绍了bulk的基础知识,以及如何同时导入多个txt,csv文件。具体内容请单击Sqlserver使用BULK同时导入多个txt、csv文件
在上一篇文章里,虽然能同时导入多个文件,但是,还是有个弊端,需要更改文件名,还是不够方便。下面对上次导数脚本进行升级,不需要再更改文件名,直接导入文件夹内所有文件。
解决思路
首先、将文件夹中文件的【路径+名称】信息存储在一个表变量里。
然后、根据文件的【路径+名称】信息调整 bulk命令中的 data_file的值,并将命令存储在表变量中。
最后、执行存储在表变量中的SQL语句。
SQL命令解析
1.创建表变量 #files name字段用来存储文件名 sql字段用来存储sql语句
2.将文件夹中以.csv结尾的文件插入到 表变量中的 name字段中
3.将表变量#files中 name字段不是以.csv结尾的数据删除
–1.创建表变量 #files name字段用来存储文件名 sql字段用来存储sql语句
CREATE TABLE #files (name varchar(200) NULL, sql varchar(7000) NULL)
–2.将data文件夹中以.csv结尾的文件插入到 表变量中的 name字段中
INSERT #files(name) exec master…xp_cmdshell ‘dir /s/b C:\data*.csv’
–3.将表变量#files中 name字段不是以.csv结尾的数据删除
DELETE #files WHERE coalesce(name, ‘’) NOT LIKE ‘%.csv’

4.根据文件名设置sql语句,并更新到sql字段里
–4.根据文件名设置sql语句,并更新到sql字段里
UPDATE #files
SET sql = ‘bulk insert [DatabaseName].[dbo].[table] from ‘’’+name+’’’
with (FIRSTROW =1,CODEPAGE=’‘936’’,FIELDTERMINATOR = ‘’|’’,ROWTERMINATOR = ‘‘0x0A’’)’

5.执行SQL命令
–5.执行SQL命令
DECLARE @sql varchar(8000)
DECLARE cur CURSOR STATIC LOCAL FOR
SELECT sql FROM #files
OPEN cur
WHILE 1 = 1
BEGIN
FETCH cur INTO @sql
IF @@fetch_status <> 0
BREAK
EXEC(@sql)
print(@sql)
END
DEALLOCATE cur
drop table #files

全部代码
—将C:\data\文件夹中所有的csv文件导入到[DatabaseName].[dbo].[table]表中

–1.创建表变量 #files name字段用来存储文件名 sql字段用来存储sql语句
CREATE TABLE #files (name varchar(200) NULL, sql varchar(7000) NULL)
–2.将data文件夹中以.csv结尾的文件插入到 表变量中的 name字段中
INSERT #files(name) exec master…xp_cmdshell ‘dir /s/b C:\data*.csv’
–3.将表变量#files中 name字段不是以.csv结尾的数据删除
DELETE #files WHERE coalesce(name, ‘’) NOT LIKE ‘%.csv’

–4.根据文件名设置sql语句,并更新到sql字段里
UPDATE #files
SET sql = ‘bulk insert [DatabaseName].[dbo].[table] from ‘’’+name+’’’
with (FIRSTROW =1,CODEPAGE=’‘936’’,FIELDTERMINATOR = ‘’|’’,ROWTERMINATOR = ‘‘0x0A’’)’

–5.执行SQL命令
DECLARE @sql varchar(8000)
DECLARE cur CURSOR STATIC LOCAL FOR
SELECT sql FROM #files
OPEN cur
WHILE 1 = 1
BEGIN
FETCH cur INTO @sql
IF @@fetch_status <> 0
BREAK
EXEC(@sql)
print(@sql)
END
DEALLOCATE cur
drop table #files

作者:michaelxwang
链接:https://www.jianshu.com/p/9a2711e72e54
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

你可能感兴趣的:(【转载】Sqlserver使用BULK同时导入文件夹内所有txt、csv文件)