set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
ALTER proc [dbo].[p_bakTblToAccess] 
@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) 
declare @path nvarchar(1000) --文件存放目录 
declare @fname nvarchar(250) --文件名 --参数检测 
if isnull(@fname,'')='' set @fname='tempaa.mdb'
if isnull(@path,'')='' set @path='e:\'
--检查文件是否已经存在 
create table #tb1(a bit,b bit,c bit)
set @sql=@path+@fname 
insert into #tb1 exec master..xp_fileexist @sql --数据库创建 
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 not exists(select 1 from #tb1 where a=1) 
begin 
--创建   ADOX.Catalog   对象,Catalog包含描述数据源模式目录的集合
exec @err=sp_oacreate 'ADOX.Catalog',@obj out 
if @err<>0 goto lberr exec @err=sp_oamethod @obj,'Create',null,@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 [数据核查]' 
exec @err=sp_oamethod @obj,'execute',@out out,@sql 
if isnull(@s_user,'')='' 
begin
set @sql='SELECT * into [数据核查] FROM [ODBC;Driver=SQL Server;Server='+ @@servername +';database=shiyanshi].[Tab_Query]' 
print  @sql
endelse 
begin
set @sql='SELECT * into [数据核查] FROM [ODBC;Driver=SQL Server;Server='+ @@servername +';Uid=sa;Pwd=123456;database=shiyanshi].[Tab_Query]' 
print @sql
end
exec @err=sp_oamethod @obj,'execute',@out out,@sql 
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
问题:执行打印出来的sql语句报错:对象名  'ODBC;Driver=SQL Server;Server=DMS-GUOYAJUN;database=shiyanshi.Tab_Query' 无效。

解决方案 »

  1.   


    将这里[ODBC;Driver=SQL Server;Server='+ @@servername +';database=shiyanshi].[Tab_Query]' 
    改成
    OPENDATASOURCE('SQLOLEDB','Data Source='+ @@servername +';User ID=sa;Password=sa').shiyanshi.[Tab_Query]如果还不行,那么看看你的表存在不存在。
      

  2.   

    SELECT * 
    FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
      'Data Source="c:\test.xls";User ID=Admin;Password=;Extended properties=Excel 5.0')...xactionsdeclare @fn varchar(20),@s varchar(1000)
    set @fn = 'c:\test.xls'
    set @s ='''Microsoft.Jet.OLEDB.4.0'',
    ''Data Source="'+@fn+'";User ID=Admin;Password=;Extended properties=Excel 5.0'''
    set @s = 'SELECT * FROM OpenDataSource ('+@s+')...sheet1$'
    exec(@s)
      

  3.   


    用sql自带的导入\导出按向导,不易出错..