SQL Server定时作业job的设置方法

lp370480 2008-10-15 04:29:36
我写了个仓库管理系统,希望定时每个月的某一天执行月报,数据从出入库明细表里取得数据,但最近却无法执行,不知是那有问题
我的存储过过程如下:
CREATE procedure updataYueJie

as
declare @DT smallDatetime
declare @M int
set @Dt = Getdate()--取当前时间
set @M = Month(@dt)--取当前月
if (@M=1) --1 月
begin
update yuejie set yuejie.zcrk01=cryd.fx from yuejie,(select liaohao,banbenhao,sum( churushuliang)as fx from cryd where datediff(m, churushijian,getdate())<=1 and churuleixing in ('验收入库','制令入库')group by liaohao,banbenhao) as cryd where yuejie.liaohao=cryd.liaohao and yuejie.banbenhao=cryd.banbenhao
end
if (@M=2) --2 月
begin
update yuejie set yuejie.zcrk02=cryd.fx from yuejie,(select liaohao,banbenhao,sum( churushuliang)as fx from cryd where datediff(m, churushijian,getdate())<=1 and churuleixing in ('验收入库','制令入库')group by liaohao,banbenhao) as cryd where yuejie.liaohao=cryd.liaohao and yuejie.banbenhao=cryd.banbenhao
end
.
.
.
if (@M=12) --12 月
begin
update yuejie set yuejie.zcrk12=cryd.fx from yuejie,(select liaohao,banbenhao,sum( churushuliang)as fx from cryd where datediff(m, churushijian,getdate())<=1 and churuleixing in ('验收入库','制令入库')group by liaohao,banbenhao) as cryd where yuejie.liaohao=cryd.liaohao and yuejie.banbenhao=cryd.banbenhao
end
GO
SQL语句没有问题
SQL Server代理->作业中执行存储过程:
use ck
exec updataYueJie
go
操作步骤:
--管理
--SQL Server代理
--右键作业
--新建作业
--"常规"项中输入作业名称
--"步骤"项
--新建
--"步骤名"中输入步骤名
--"类型"中选择"Transact-SQL 脚本(TSQL)"
--"数据库"选择执行命令的数据库
--"命令"中输入要执行的语句:
加你的过程 ---

--确定
--"调度"项
--新建调度
--"名称"中输入调度名称
--"调度类型"中选择你的作业执行安排
--如果选择"反复出现"
--点"更改"来设置你的时间安排

然后将SQL Agent服务启动,并设置为自动启动,否则你的作业不会被执行
...全文
210 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
lp370480 2008-10-17
  • 打赏
  • 举报
回复
谢谢各位!已经好了!!! 我也不知道什么原因,反正好了!!!嘿嘿~~~
CN_SQL 2008-10-16
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 lp370480 的回复:]
这是我储存过程中的开始部分
CREATE procedure updataYueJie
@Value varchar(10)
as
declare @DT smallDatetime
declare @M int
set @Dt = Getdate()--取当前时间
set @M = Month(@Dt)--取当前月
if (@M=1) --1 月
其实在我的储存过程中有两个参数:declare @DT smallDatetime ;declare @M int
我该怎么写执行储存过程语句呢?
我用exec updataYueJie convert(varchar(10),getdate(),120)时说:在关键字…
[/Quote]


declare @s_value varchar(10)
set @s_value = convert(varchar(10),getdate(),120)
exec updataYueJie @s_value
go

中国风 2008-10-16
  • 打赏
  • 举报
回复
執行Job的所有者為系統賬號、或sa
lp370480 2008-10-16
  • 打赏
  • 举报
回复
这是我储存过程中的开始部分
CREATE procedure updataYueJie
@Value varchar(10)
as
declare @DT smallDatetime
declare @M int
set @Dt = Getdate()--取当前时间
set @M = Month(@Dt)--取当前月
if (@M=1) --1 月
其实在我的储存过程中有两个参数:declare @DT smallDatetime ;declare @M int
我该怎么写执行储存过程语句呢?
我用exec updataYueJie convert(varchar(10),getdate(),120)时说:在关键字 'convert' 附近有语法错误。

hyde100 2008-10-16
  • 打赏
  • 举报
回复

exec updataYueJie convert(varchar(10),getdate(),120)
hyde100 2008-10-16
  • 打赏
  • 举报
回复
你的参数应该是一个日期吧?
lp370480 2008-10-16
  • 打赏
  • 举报
回复
我应该怎么修改呢?
bad4you51 2008-10-16
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 CN_SQL 的回复:]
引用 9 楼 lp370480 的回复:
这是我储存过程中的开始部分
CREATE procedure updataYueJie
@Value varchar(10)
as
declare @DT smallDatetime
declare @M int
set @Dt = Getdate()--取当前时间
set @M = Month(@Dt)--取当前月
if (@M=1) --1 月
其实在我的储存过程中有两个参数:declare @DT smallDatetime ;declare @M int
我该怎么写执行储存过程语句呢?
我用exec updataYueJie convert(varchar(10)…
[/Quote]
这样是可以的
或者你可以直接把@Value varchar(10) 去掉,然后在作业调度里面直接设定每个月第几天执行

或者 if day(getdate()) in(你要执行的那一天)
begin
exec updataYueJie
end
lp370480 2008-10-16
  • 打赏
  • 举报
回复
我可以在查询分析器上执行:exec updataYueJie 并成功,但我在SQL Server代理--调动作业上执行就不行了,在设定的时间里不能执行,我的作业--步骤里的代码也是 exec updataYueJie 不知道这样写是否可以?
CN_SQL 2008-10-15
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 lp370480 的回复:]
我用查詢分析器执行储存过程:

use ck
exec updataYueJie
go

报错为:过程 'updataYueJie' 需要参数 '@Value',但未提供该参数。
但我在储存过程中已经有
CREATE procedure updataYueJie
@Value varchar(10)
as
declare @DT smallDatetime
declare @M int
set @Dt = Getdate()--取当前时间
set @M = Month(@Dt)--取当前月
if (@M=1) --1 月
[/Quote]
.....,你的存储过程需要参数,你执行不加参数??这是基础问题。
lp370480 2008-10-15
  • 打赏
  • 举报
回复
我用查詢分析器执行储存过程:

use ck
exec updataYueJie
go

报错为:过程 'updataYueJie' 需要参数 '@Value',但未提供该参数。
但我在储存过程中已经有
CREATE procedure updataYueJie
@Value varchar(10)
as
declare @DT smallDatetime
declare @M int
set @Dt = Getdate()--取当前时间
set @M = Month(@Dt)--取当前月
if (@M=1) --1 月
hsie168518 2008-10-15
  • 打赏
  • 举报
回复

慢慢测试,别人很难帮到你的
水族杰纶 2008-10-15
  • 打赏
  • 举报
回复
先在查詢分析器重執行你的存儲過程
看問題出在存儲過程還是作業
然後再進一步找問題所在
CN_SQL 2008-10-15
  • 打赏
  • 举报
回复
你先要确定你的JOB是否已经运行过,是否有错误,如果有错误,错误记录是什么?

如果不是上面描述的JOB配置的问题,那肯定就是业务逻辑的问题,你可以通过修改你的业务逻辑

增加一些临时日志表,记录一些临时变量或者参数,然后当出错的时候,通过查看这些变量值来找到问题根源。

34,590

社区成员

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

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