一个关于存储过程和INSERT INTO OPENROWSET()的问题,高手来看,高分求助!

xyn_ld 2005-08-12 10:19:21
我写了一个存储过程,功能是实现从SQL SERVER 数据库备份一些表到ACCESS数据库,两个数据库都在远程就算机上,因为服务器上放了多个用户的数据库,所以备份的时候需要根据数据库的名称生成对应的文件夹。我在服务器的C盘下放了一个BAK文件夹,文件夹下有一个事先做好的备份的ACCESS的数据库模板,里面是一些空白表格。我用第一种方法如下:先根据数据库的名称在BAK下生成一个对应名字的文件夹,然后把BAK下的数据库模板拷贝到生成的文件夹下,接着开始写数据库,用INSERT INTO OPENROWSET('Microsoft.Jet.oledb.4.0','c:\bak\dbname\*.mdb','admin','',select 列 from A表) select * from sql表。写完以精确到妙的时间作为文件名重命名文件。这种方法的问题是,由于服务器的名字是不确定的,所以,中间的路径名是个变量,我用了个变量@ls_addr,但是该语句根本就不识别变量;后来我用了第二种方法,先在BAK下建一个TEMP文件夹,在这里面也事先放一个数据库模板,然后每次备份的时候,先把 模板拷贝到TEMP下覆盖原来的文件,然后写数据库,然后把写好的数据库文件,拷贝到生成的数据库名对应的文件夹下,重命名.这种方法可以不用变量就实现备份,但是问题是,因为用多个库在一个服务器上,这就会出现多个用户同时备份,同时往同一个数据库文件,就是TEMP文件夹下的那个文件写数据,这样也会出现严重的问题.

各位高手帮帮忙拉,看我这个问题怎么可以解决,解决成功赠100分!谢谢!
...全文
256 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjcxc 元老 2005-08-13
  • 打赏
  • 举报
回复
declare @filename nvarchar(1000)
set @filename='c:\bak\dbname\*.mdb'
exec('
INSERT INTO OPENROWSET(''Microsoft.Jet.oledb.4.0'','''+@filename+''',''admin'','''',select 列 from A表) select * from sql表')
ghostzxp 2005-08-13
  • 打赏
  • 举报
回复
第一种方法
EXEC ('INTO OPENROWSET(''Microsoft.Jet.oledb.4.0'','''+@ls_addr+'\*.mdb'','admin','''',select 列 from A表) select * from sql表')
第二种方法
生成数据之前,把模版拷出来时生成唯一的文件名,如加上时间等,再备份数据.完成后再做其他操作.
天地客人 2005-08-12
  • 打赏
  • 举报
回复
我总感觉这样做很累!用户量大时,对服务器性能要求高!

34,593

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧