日期:2014-05-17  浏览次数:20448 次

存储过程先返回结果,再后台执行
我有个存储过程,执行时间可能要很久。我不想一直等下去,有没有办法,先返回结果给客户端。
我考虑过,客户端调用存储过程A建立作业,启动作业。然后这个作业去执行存储过程B。
B就是我们那个执行时间比较久的存储过程。

不知道这样能实现吗?或者有什么其他的方法?

------解决方案--------------------
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

如果存储过程B执行是否成功不重要,可以这么做


应该是可以的


该存储过程很多统计,按天,按周,按月对历史表统计,举例用户要查出销量每天>1000 、盈利>1000 ...可能是有十多个统计参数。反正传多一个参数过来,就是多一个统计类型。所以才时间长点。

存储过程能建立作业?还能启动它吗?应该怎么弄呢?


可以允许时间统计长点,没有关系的。这个客户不要求速度的


可以在你的存储过程中写下面的代码:





--1.新建作业 --> 作业步骤 --> 作业调度 --> 作业服务器
declare @jobname sysname,@db_name sysname


select @jobname = 'job_update_sql',
       @db_name = db_name()


--1.1创建作业
exec msdb..sp_add_job 
@job_name=@jobname


--1.2创建作业步骤
exec msdb..sp_add_jobstep 
@job_name=@jobname,
@step_name = N'数据处理',
    @subsystem = N'TSQL',
    @database_name=@db_name,
    @command = N'Exec 你的存储过程',  
    @retry_attempts = 1, 
    @retry_interval = 1  


--1.3添加作业步骤,每天8点运行一次
EXEC msdb..sp_add_jobschedule 
@job_name=@jobname, 
    @name = N'job_update_sql作业运行时间',
    @freq_type=4 ,    --间隔为每天
    @freq_interval=1,
@active_start_time=200000  --8点


--1.4添加目标服务器
EXEC msdb.dbo.sp_add_jobserver 
@job_name = @jobname ,  
@server_name = @@servername --@@servername 这个函数的返回值不一定准确