您的位置:首页 > 数据库

SQL_SERVER数据 导出 Access数据

2006-05-23 17:32 375 查看
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[p_exporttb]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)


drop procedure [dbo].[p_exporttb]


GO






/**//*--数据导出Access


导出数据库中的表到Access


    如果文件不存在,将自动创建文件


    如果表存在,将覆盖现有的表


    支持导出所有的数据类型




/*--调用示例


p_exporttb @s_tbname='sysobjects',@path='c:/',@fname='test.mdb'


--*/


create proc 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


go
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息