超级sql作业执行问题

stone100 2003-10-09 08:56:38
在sql服务器上建了一个作业,定时将d:\bankdata\目录下的dbf文件导入数据库中,并将已导入过的文件名改为'old'+'原文件名',在查询分析仪中执行没有问题,但执行作业后发现数据导入是成功的,但在导入完后不能更改原文件名,也不报错,提示作业执行成功。百思不得其解,盼高手相助。
调度也没有问题。
作业源代码:

--检测dbf文件是否存在
declare @i int
declare @File nchar(6) --要取得的DBF文件名
declare @FileAdd nvarchar(1000)
declare @SalaryDate smalldatetime
set @SalaryDate=DateAdd(mm,-1,getdate())
set @File=year(@SalaryDate)*100+Month(@SalaryDate)
set @FileAdd ='d:\BankData\'+@File+'.dbf'
exec master..xp_fileexist @FileAdd, @i output
If @i = 1
Begin
--清空PostBank.dbo.tBank表中的操作月数据
delete from PostBank.dbo.tBank where year(sdDate)=year(@SalaryDate) and month(sdDate)=Month(@SalaryDate)
declare @cSql nvarchar(3000)
declare @cSqlRen nvarchar(3000)
set @cSql='insert into postbank.dbo.tBank
select * from openrowset(''MSDASQL'',''Driver=Microsoft Visual FoxPro Driver;
SourceDB=d:\BankData;SourceType=DBF'',''select * from '+@File+'.dbf'')'
exec sp_executesql @cSql

--检测工号字段是否为6位,如果不足6位则在左侧补0
update postbank.dbo.tBank set GongHao='0000'+GongHao
update postbank.dbo.tBank set GongHao=right(GongHao,6)

set @cSqlRen='ren d:\BankData\'+@File+'.dbf,old'+@File+'.dbf'
exec master..xp_cmdshell @cSqlren
End
Else
print 'sorry'
...全文
55 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
stone100 2003-10-10
  • 打赏
  • 举报
回复
up
zjcxc 2003-10-09
  • 打赏
  • 举报
回复
是否权限问题?
stone100 2003-10-09
  • 打赏
  • 举报
回复
刚才我又加了第三步,第一步插入,第二步改名,第三步在另一个表中加入一条记录。
每步之间均为成功后转入下一步,失败后退出作业。但仍然未能达到改名的目的。
stone100 2003-10-09
  • 打赏
  • 举报
回复
刚试过将改名操作单独放在一步里了,还是不行。马可兄说的我正在试。
zarge 2003-10-09
  • 打赏
  • 举报
回复
将改名操作单独放在一个步骤中执行试试
txlicenhe 2003-10-09
  • 打赏
  • 举报
回复
没看出有什么问题
建议加错误处理代码。

--检测dbf文件是否存在
declare @i int
declare @File nchar(6) --要取得的DBF文件名
declare @FileAdd nvarchar(1000)
declare @SalaryDate smalldatetime
set @SalaryDate=DateAdd(mm,-1,getdate())
set @File=year(@SalaryDate)*100+Month(@SalaryDate)
set @FileAdd ='d:\BankData\'+@File+'.dbf'
exec master..xp_fileexist @FileAdd, @i output
if @@error <> 0 goto Err:
If @i = 1
Begin
--清空PostBank.dbo.tBank表中的操作月数据
delete from PostBank.dbo.tBank where year(sdDate)=year(@SalaryDate) and month(sdDate)=Month(@SalaryDate)
if @@error <> 0 goto Err:
declare @cSql nvarchar(3000)
declare @cSqlRen nvarchar(3000)
set @cSql='insert into postbank.dbo.tBank
select * from openrowset(''MSDASQL'',''Driver=Microsoft Visual FoxPro Driver;
SourceDB=d:\BankData;SourceType=DBF'',''select * from '+@File+'.dbf'')'
exec sp_executesql @cSql
if @@error <> 0 goto Err:
--检测工号字段是否为6位,如果不足6位则在左侧补0
update postbank.dbo.tBank set GongHao='0000'+GongHao
if @@error <> 0 goto Err:
update postbank.dbo.tBank set GongHao=right(GongHao,6)
if @@error <> 0 goto Err:
set @cSqlRen='ren d:\BankData\'+@File+'.dbf,old'+@File+'.dbf'
exec master..xp_cmdshell @cSqlren
if @@error <> 0 goto Err:
End
Else
print 'sorry'
Err:
print 'Error'
pengdali 2003-10-09
  • 打赏
  • 举报
回复
1、单独执行改名呢?

2、在作业里添加一步只有改名,设置在第一步成功后执行。
stone100 2003-10-09
  • 打赏
  • 举报
回复
我用的是sa用户进行上述操作。
stone100 2003-10-09
  • 打赏
  • 举报
回复
是指作业所有者否?我用的是相应库的dbo用户。而且有错误也应该报错退出作业才对吧。

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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