SE [JjwDB] GO /****** Object: StoredProcedure [dbo].[p_exporttb] Script Date: 06/09/2013 14:12:07 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO /*--数据导出Access 导出数据库中的表到Access 如果文件不存在,将自动创建文件 如果表存在,将覆盖现有的表 支持导出所有的数据类型 --邹建 2004.04(引用请保留此信息)--*/ /*--调用示例 p_exporttb @s_tbname='sysobjects',@path='c:\',@fname='test.mdb' --*/ ALTER proc [dbo].[p_exporttb] @s_tbname sysname, --要导出的表名 @path nvarchar(1000), --文件存放目录 @fname nvarchar(250), --文件名 @tbname varchar(250)='', --要创建的表名,默认为导出的表名 @password varchar(20)='', --ACCESS数据库的密码 @s_user sysname='', --如果提示连接错误,则需要提供登陆sql服务器的用户名及密码 @s_password varchar(50)='' as set nocount on declare @err int,@src nvarchar(255),@desc nvarchar(255),@out int declare @obj int,@constr nvarchar(1000),@sql varchar(8000),@fdlist varchar(8000) --参数检测 if isnull(@fname,'')='' set @fname='temp.mdb' if isnull(@tbname,'')='' set @tbname=@s_tbname --检查文件是否已经存在 if right(@path,1)<>'\' set @path=@path+'\' set @sql=@path+@fname exec master..xp_fileexist @sql,@err out --数据库创建 select @sql=@path+@fname ,@constr='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+@sql +case isnull(@password,'') when '' then '' else ';Jet OLEDB:Database Password='+@password end if @err=0 begin exec @err=sp_oacreate 'ADOX.Catalog',@obj out if @err<>0 goto lberr exec @err=sp_oamethod @obj,'Create',@out out,@constr if @err<>0 goto lberr exec @err=sp_oadestroy @obj if @err<>0 goto lberr end --连接数据库 exec @err=sp_oacreate 'adodb.connection',@obj out if @err<>0 goto lberr exec @err=sp_oamethod @obj,'open',null,@constr if @err<>0 goto lberr --删除现有的表 set @sql='drop table ['+@tbname+']' exec @err=sp_oamethod @obj,'execute',@out out,@sql --if @err<>0 goto lberr --导入表 if isnull(@s_user,'')='' set @sql='SELECT * into ['+@tbname +'] FROM [ODBC;Driver=SQL Server;Server='+ @@servername +';database='+db_name()+'].['+@s_tbname+']' else set @sql='SELECT * into ['+@tbname +'] FROM [ODBC;Driver=SQL Server;Server='+ @@servername +';Uid='+@s_user+';Pwd='+isnull(@s_password,'') +';database='+db_name()+'].['+@s_tbname+']' exec @err=sp_oamethod @obj,'execute',@out out,@sql if @err<>0 goto lberr exec @err=sp_oamethod @obj,'close',null if @err<>0 goto lberr exec @err=sp_oadestroy @obj return lberr: exec sp_oageterrorinfo 0,@src out,@desc out if @obj<>0 exec @err=sp_oadestroy @obj lbexit: select cast(@err as varbinary(4)) as 错误号 ,@src as 错误源,@desc as 错误描述 select @sql,@constr,@fdlist