34,575
社区成员
发帖
与我相关
我的任务
分享
declare @hr int,@obj int,@constr varchar(4000),@out int,
@sql varchar(2000),@tb varchar(200),@path varchar(200)
--创建一个adodb的连接(OLE对象)
exec @hr=sp_oacreate 'adodb.connection',@obj out
if @hr<>0 raiserror('1error',16,1)
--调用adodb的方法open
set @path='D:\test.xls'
set @constr='Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties="Excel 8.0;HDR=YES;DATABASE='+@path+'"'
exec @hr=sp_oamethod @obj,'open',null,@constr
if @hr<>0 raiserror('2error',16,1)
--调用adodb的方法execute 到这步时,xls文件就已经生成了
set @tb ='ta'
set @sql='create table ta (a int)'
exec @hr=sp_oamethod @obj,'execute',@out out,@sql
--释放上面已创建的 OLE 对象adodb
--问题就出在这里,感觉sp_oadestroy这段代码似乎没有起作用,并没有释放OLE对象
exec @hr=sp_oadestroy @obj
if @hr<>0 raiserror('3error',16,1)
--用静态SQL实现的话,提示找不到对象ta$,请确认路径和文件名的正确性(所以只能用动态的去实现)
insert into
openrowset('microsoft.jet.oledb.4.0','excel 8.0;hdr=yes;database=D:\test.xls','select * from [ta$]')(a)
select * from csdn.dbo.ta
--用动态SQL实现的话,提示文件‘’不能打开,正在被其它的用户打开,没有读取的权限(估计是没有释放OLE对象)
set @sql='insert into
openrowset(''microsoft.jet.oledb.4.0'',''excel 8.0;hdr=yes;database='+@path+''',''select * from ['+@tb+'$]'')(a)
select * from csdn.dbo.ta'
exec (@sql)
declare @hr int,@obj int,@constr varchar(4000),@out int,
@sql varchar(2000),@tb varchar(200),@path varchar(200)
--创建一个adodb的连接(OLE对象)
exec @hr=sp_oacreate 'adodb.connection',@obj out
if @hr<>0 raiserror('1error',16,1)
--调用adodb的方法open
set @path='D:\test.xls'
set @constr='Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties="Excel 8.0;HDR=YES;DATABASE='+@path+'"'
exec @hr=sp_oamethod @obj,'open',null,@constr
if @hr<>0 raiserror('2error',16,1)
--调用adodb的方法execute 到这步时,xls文件就已经生成了
set @tb ='ta'
set @sql='create table ta (a int)'
exec @hr=sp_oamethod @obj,'execute',@out out,@sql
--释放上面已创建的 OLE 对象adodb
--问题就出在这里,感觉sp_oadestroy这段代码似乎没有起作用,并没有释放OLE对象
exec @hr=sp_oadestroy @obj
if @hr<>0 raiserror('3error',16,1)
--用动态SQL实现的话,提示文件‘’不能打开,正在被其它的用户打开,没有读取的权限(估计是没有释放OLE对象)
set @sql='insert into
openrowset(''microsoft.jet.oledb.4.0'',''excel 8.0;hdr=yes;database='+@path+''',''select * from ['+@tb+'$]'')(a)
select a from dbname.dbo.tb'
exec (@sql)
--调用adodb的方法execute 到这步时,xls文件就已经生成了
set @tb ='ta'
set @sql='create table ta (a int)'
exec @hr=sp_oamethod @obj,'execute',@out out,@sql
create table xx.dbo.ta( a int)
insert into ta select 1