有关日志txt文本文件导入数据库表
ALTER PROCEDURE [dbo].[proc_test]AS
--------批量导入日志文件-------------
declare @path nvarchar(4000)
select @path='e:\文本路径\';
if right(@path,1)<>'\'
select @path=@path+'\'
declare @tmp table(fn nvarchar(4000),depth int,isfile int)
--整个文件夹
insert @tmp exec master..xp_dirtree @path=@path,@depth=1,@file=1
declare @fname varchar(250)
declare @sql varchar(4000)
declare tb_cursor cursor --定义游标
for
--文件夹里面包含的类似test1.log.2008-01-01命名的所有txt文件
select fn from @tmp where isfile=1 and fn like '%.log.20__-__-__'
open tb_cursor
fetch next from tb_cursor into @fname
while @@fetch_status<>-1 --逐个导入文件
begin
----logsrc是一个表名称,这时注意的是,对应的txt文件里面有几个相隔的字段需导入,这个表就要有几个字段名对应
print @fname;
select @sql='bulk insert logsrc from '''+@path+@fname+'''
with (formatfile='''+@path+''+'format.xml'')'
exec(@sql)
fetch next from tb_cursor into @fname
end
close tb_cursor
deallocate tb_cursor --游标结束
-----format.xml文件格式:
----注意下面的“列名N”对应的是logsrc表里面相应的列名
<?xml version="1.0"?>
<BCPFORMAT xmlns="http://schemas.microsoft.com/sqlserver/2004/bulkload/format" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<RECORD>
<FIELD ID="1" xsi:type="CharTerm" MAX_LENGTH="4000" TERMINATOR=" "/>
<FIELD ID="2" xsi:type="CharTerm" MAX_LENGTH="4000" TERMINATOR=" "/>
<FIELD ID="3" xsi:type="CharTerm" MAX_LENGTH="4000" TERMINATOR=" "/>
<FIELD ID="4" xsi:type="CharTerm" MAX_LENGTH="4000" TERMINATOR=" "/>
<FIELD ID="5" xsi:type="CharTerm" MAX_LENGTH="4000" TERMINATOR=" "/>
<FIELD ID="6" xsi:type="CharTerm" MAX_LENGTH="4000" TERMINATOR="\n"/>
</RECORD>
<ROW>
<COLUMN SOURCE="1" NAME="列名1" xsi:type="SQLNVARCHAR"/>
<COLUMN SOURCE="2" NAME="列名2" xsi:type="SQLNVARCHAR"/>
<COLUMN SOURCE="3" NAME="列名3" xsi:type="SQLNVARCHAR"/>
<COLUMN SOURCE="4" NAME="列名4" xsi:type="SQLNVARCHAR"/>
<COLUMN SOURCE="5" NAME="列名5" xsi:type="SQLNVARCHAR"/>
<COLUMN SOURCE="6" NAME="列名6" xsi:type="SQLNVARCHAR"/>
</ROW>
</BCPFORMAT> 收益匪浅!
页:
[1]