您的位置:首页 > 数据库

SQLServer将文件下所有的txt内容导入到数据库表

2014-02-19 17:19 169 查看
使用场景: 比如将 C:\Test\ 目录下的所有 txt文件内容 导入到 Table_1 中


/***** Step 1 开启 xp_cmdshell
Use Master
GO

EXEC master.dbo.sp_configure 'show advanced options', 1
RECONFIGURE WITH OVERRIDE
GO

EXEC master.dbo.sp_configure 'xp_cmdshell', 1
RECONFIGURE WITH OVERRIDE
GO

*******/


  

--定义临时表,用于存放获取的文件名称

CREATE TABLE #files
(
name VARCHAR(200) NULL ,
sql VARCHAR(7000) NULL
)
--获取文件名称,存放在#files
INSERT  #files
( name
)
EXEC master..xp_cmdshell 'dir c:\test /b'
--删除不要的文件名称
DELETE  #files
WHERE   COALESCE(name, '') NOT LIKE 'Code%' --将 Code改为要删除的文件名称

--插入需要  导入文件内容的 命令SQL,需要修改 Table_1(改为导入的Table)和文件路径

UPDATE  #files
SET     sql = 'BULK INSERT Table_1 FROM ''' + 'C:\Test\' + name + ''' WITH ('
+ 'DATAFILETYPE = ''char'', FIELDTERMINATOR = ''\t'', '
+ 'ROWTERMINATOR = ''\n'')'

--开始执行导入
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)
END

DEALLOCATE cur


  

主要分为读取文件夹下所有文件和导入文件内容两部分

--读取文件夹下所有文件


declare @files table (ID int IDENTITY, FileName varchar(100))
insert into @files execute xp_cmdshell 'dir c:\test /b'
select 'c:\'+ [FileName] AS FILEPATH INTO #temp from @files
SELECT * FROM #temp


  

--导入文件内容


BULK INSERT dbo.Table_1
FROM #temp
WITH
(
ROWTERMINATOR ='\n'
)


  

参考:
http://social.msdn.microsoft.com/Forums/sqlserver/en-US/47c8edc1-8cad-4a24-a09a-3fc0c943325c/bulk-insert-multiple-files-tsql
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: