日期:2014-05-18  浏览次数:20509 次

如何杀死当前的ACCESS进程
问题:
在存储过程中,首先打开ACCESS数据库,将其中的数据导入到SQL   SERVER数据库对应的表中(我已经实现),导入完数据后紧接着我要删除ACCESS数据库文件(在系统对应的文件夹目录中(我也实现,是单独测试的,可以实现)),但是问题是当在一起执行,也就是导人存储过程执行完,紧接着执行删除ACCESS文件时,系统提示另一个进程正在使用中,不能删除.我想是不是要用到异步事务处理(小弟我不会),但是我想要是导入过程执行完,我写个杀当前进程(ACCESS),然后再执行删除ACCESS数据库文件.
存储过程是触发器触发的
代码如下:
CREATE   trigger   data_insert
on   dbo.AccToSql_data
for   insert
as
declare   @ghid   varchar(50)
declare   @dbpath   varchar(200)
declare   @dbname   varchar(200)
declare   @nowyear   varchar   (10)
set   @nowyear=year(getdate())
select   @ghid=CorNum,@dbpath=dbasepath,@dbname=dbasename   from
inserted   WHERE   ID=(SELECT   TOP   1   ID   FROM   AccToSql_data   order   by   ID   DESC)     AND   Upload_year=@nowyear
EXECUTE   master..XP_cmdshell   'net   start   msdtc '
EXECUTE   xlghdata..AccToSql_Memorabilia   @dbname,@ghid,@dbpath
EXECUTE   xlghdata..DelAccess_Pro     @dbname,@dbpath


导入数据存储过程:

declare   @mess   varchar(2000)
if   @@error <> 0     or   @@rowcount=0
begin  
select   @mess=@@error
end
end
if   @returnflag=0
begin
EXECUTE   @returnflag=AccToSql_Photo   @databasename,@danweibh,@dbasepath,@success   output
if   @@error <> 0   or   @@rowcount   =0
begin  
select   @mess=@@error
end
end
if   @returnflag=0
begin
EXECUTE   @returnflag=AccToSql_Video     @databasename,@danweibh,@dbasepath,@success   output
if   @@error <> 0   or   @@rowcount   =0
begin  
select   @mess=@@error
end
end
if   @@error=0

begin
commit   tran
end
else
begin
rollback   tran
raiserror( '你的Access数据表结构和SQLserver数据表的结构互相不符合,请到相关网站查看! ',16,1)
end
end
/*
if   @@error=0
begin
WAITFOR   DELAY   '00:00:20 '
EXECUTE   MASTER..XP_cmdshell   'net   stop   msdtc '
end*/
return
GO
杀ACCESS文件存储过程
create   procedure   DelAccess_Pro
@databasename   varchar(200),@dbasepath   varchar(200)
as
declare   @dels   varchar(10)
declare   @sql   varchar(2000)
set   @dels= 'del '
set   @sql=rtrim(ltrim(@dels))+ '   '+rtrim(ltrim(@dbasepath))+ltrim(rtrim(@databasename   ))
exec   master..xp_cmdshell   @sql

GO



------解决方案--------------------
找个pskill,配合xp_cmdshell使用。
------解决方案--------------------
master..xp_cmdshell 'taskkill /F /IM msaccess.exe '