IT职业工程师's Archiver

蓝色梦幻 发表于 2008-8-13 08:28

有关日志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>

一路顺风 发表于 2008-8-16 21:54

收益匪浅!

页: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.