--先给你一个参考:/*--实现数据导入/导出的存储过程 可以实现导入/导出 整个数据库/指定表 到文本文件邹建 2003.07-----------------*//*--调用示例
导出调用示例
--导出指定表,这里指定导出表:地区资料 和 基本信息,文件名前缀为:zj
exec file2table 'zj','','','d:\','xzkh_sa','地区资料,基本信息'
--导出整个数据库到c:\docman目录下,无文件前缀
exec file2table 'zj','','','d:\txt\','xzkh_sa'导入调用示例
--导入指定表,这里指定导出表:地区资料 和 基本信息,文件名前缀为:zj
exec file2table 'zj','','','c:\zj','xzkh_sa','地区资料,基本信息',0
--导入整个数据库从c:\docman目录下,无文件前缀
exec file2table 'zj','','','C:\docman\','xzkh_sa','',0
--*/if exists(select 1 from sysobjects where name='File2Table' and objectproperty(id,'IsProcedure')=1)
drop procedure File2Table
gocreate procedure File2Table
@servername varchar(200) --服务器名
,@username varchar(200) --用户名,如果用NT验证方式,则为空''
,@password varchar(200) --密码
,@path varchar(1000) --目录名+文件前缀,目录名必须以'\'结束,文件名自动用表名.txt
,@dbname varchar(500) --数据库名
,@tbname varchar(8000)='' --表名列表,如果不指定,则表示所有用户表
,@isout bit=1 --1为导出(默认),0为导入
as
declare @sql varchar(8000),@sql1 varchar(8000)
declare @tbstation int,@filestation int--初始化数据处理语句
select @sql='bcp "'+@dbname+'..'
,@tbstation=len(@sql)+1
,@sql=@sql
+case when @isout=1 then '" out' else '" in' end
+' "'+@path
,@filestation=len(@sql)+1
,@sql=@sql
+'.txt" /c' +' /S"'+@servername
+case when isnull(@username,'')='' then '' 
else '" /U"'+@username end
+'" /P"'+isnull(@password,'')+'"'--数据导入/导出处理
--定义数据处理的游标
set @sql1='declare #tb cursor for select name from '
+@dbname+'..sysobjects where xtype=''U'''
+case when isnull(@tbname,'')='' then ''
else ' and name in ('''+replace(@tbname,',',''',''')+''')' end
exec(@sql1)
open #tb
fetch next from #tb into @tbname
while @@fetch_status=0
begin
select @sql1=stuff(@sql,@tbstation,0,@tbname)
,@sql1=stuff(@sql1,@filestation+len(@tbname),0,@tbname)
exec master..xp_cmdshell @sql1,no_output
fetch next from #tb into @tbname
end
close #tb
deallocate #tb
go

解决方案 »

  1.   

    /*--下面是实现导出指定查询语句的存储过程 可以实现导出 指定查询 到文本文件--邹建 2003.12-----------------*//*--调用示例
    导出调用示例
    --导出指定表,这里指定导出表:地区资料
    exec file2table '服务器名','','','c:\zj.txt','select * from xzkh_new..地区资料'
    --*/if exists(select 1 from sysobjects where name='File2Table' and objectproperty(id,'IsProcedure')=1)
    drop procedure File2Table
    gocreate procedure File2Table
    @servername varchar(200) --服务器名
    ,@username varchar(200) --用户名,如果用NT验证方式,则为空''
    ,@password varchar(200) --密码
    ,@filename varchar(1000) --目录名+文件名
    ,@tbname varchar(5000)='' --查询语句
    as
    declare @sql varchar(8000)set @sql='bcp "'+@tbname+'" queryout  "'+@filename+'" /c' +' /S"'+@servername
    +case when isnull(@username,'')='' then '' 
    else '" /U"'+@username end
    +'" /P"'+isnull(@password,'')+'"'
    exec master..xp_cmdshell @sql
    go
      

  2.   

    'VB中的调用示例:Dim iCmd As ADODB.Command
    Dim iRe&Set iCmd = New ADODB.Command
    With iCmd
        .ActiveConnection = 数据库连接字符串
        .CommandType = adCmdStoredProc
        .CommandText = "File2Table"
        .Parameters.Refresh
        .Parameters("@servername")="服务器名"
        .Parameters("@username")="用户名"
        .Parameters("@password")="密码"
        .Parameters("@filename")="文件名"
        .Parameters("@tbname")="查询语句"
        .Execute 
    End With
    End Sub