科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道求sql导入语句

求sql导入语句

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

求sql导入语句

作者:csdn 来源:csdn 2009年12月18日

关键字: MS-SQL Server 问答

  • 评论
  • 分享微博
  • 分享邮件

求sql导入语句

我有500多个csv文件,想导入SQL数据库内,数据库字段与文件字段是一样的,
如何写批量导入语句。

 

用动态sql
--以下是别人写的,

--第一步,先获取某一个文件夹下的所有txt 文件

create table tmp_filelist (cdrfile varchar(64))
go
exec master.dbo.xp_cmdshell 'dir D:\data.db\4006\400. <YYYYMM>\*.txt /s/b  > D:\data.db\4006\400. <YYYYMM>\list'

-- -s:表示该文件夹下所有文本文件,包括子文件夹
-- -b:当前文件夹所有文本文件
-- >:表示把当前文件列表存入指定的文件中
go
bulk insert tmp_filelist from N'D:\data.db\4006\400. <YYYYMM>\list'

--用药bulk insert 命令把文件列表的文件名存入 数据表中
go


--第二步,利用游标把每一文件导入数据库中
--他这里是用bulk insert ,也可以用
--select * from opendatasource('microsoft.jet.oledb.4.0','text;hdr=no;database=路径')...[文件名#txt]

truncate table tmp_cdr4006csv
declare @cdrfile varchar(64)
declare @sql nvarchar(256)
declare @cmd varchar(512)
declare cur_fl cursor for select * from tmp_filelist
open cur_fl
fetch next from cur_fl into @cdrfile
while @@fetch_status!=-1 begin
    set @sql ='BULK INSERT tmp_cdr4006csv FROM N'''+@cdrfile+''' WITH ( FIELDTERMINATOR = '','')' exec sp_executesql @sql
    fetch next from cur_fl into @cdrfile
end
close cur_fl
deallocate cur_fl

 

declare @count int,@path varchar(200),@tb varchar(100),@cmd nvarchar(4000)
set @count =500
set @path='D:\abc\'--a100.csv
set @count=1
whiel @count <=600
begin
set @cmd='bcp '+@path + 'a'+cast(@count as varchar)+'.csv in '+@tb+' -c -t, -T'
exec master.dbo.xp_cmdshell @cmd
set @count=@count=1
end

 

 

SQL codeif exists(select 1 from sysobjects where name='file2table' and objectproperty(id,'isprocedure')=1)
 drop procedure file2table
 go
 create procedure file2table
   @servername varchar(200) --服务器名称
  ,@username varchar(200)   --用户名,如果用nt验证方式,则为空''
  ,@password varchar(200)   --密码
  ,@tbname varchar(500)     --数据库
  ,@filename varchar(1000)  --导入/导出路径/文件名,如果@tbname参数指明是导出整个数据库,则这个参数是文件存放路径,文件名自动用表名.txt
  ,@isout bit               --1为导出,0为导入
 as
 declare @sql varchar(8000)

------如果@tbname参数为ksoa类型,则默认导出整个数据库中的数据,如果@tbname参数为ksoa..spkfk则默认导出某个表的数据
 begin --导出整个数据库,定义游标,取出所有的用户表
   declare @m_tbname varchar(250)
   if right(@filename,1)<>'\' set @filename=@filename+'\'--如果不是文件夹根目录,设置为根目录
   set @m_tbname='declare #tb cursor for select name from '+@tbname+'.dbo.sysobjects where xtype=''u''
                                         and (name not like ''wms_%'' and name not like ''HR_%'' and name not like ''tmp_%'')'
   exec(@m_tbname)
   open #tb
   fetch next from #tb into @m_tbname
   while @@fetch_status=0
     begin
       set @sql='bcp '+@tbname+'.'+'dbo.'+@m_tbname+case when @isout=1 then ' out ' else ' in ' end
           +  @filename+@m_tbname+'.csv -w'   --  注意
           +' /S '+@servername +case when isnull(@username,'')='' then '' else ' /U '+@username end
           +' /P '+isnull(@password,'')
 exec master.dbo.xp_cmdshell @sql
 fetch next from #tb into @m_tbname
 end
 close #tb
 deallocate #tb
 end
 go

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章