首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用查询/代码动态创建的SQL作业

使用查询/代码动态创建的SQL作业
EN

Stack Overflow用户
提问于 2020-03-16 11:26:05
回答 2查看 73关注 0票数 0

我在做一个竞价系统。

人们在竞价开始时出价,当竞价结束时,他们会得到结果。

是否可以使用query创建SQL作业?

我想做的是,一旦招标时间结束,我想更新每个投标人的记录,谁是赢家或输家。

所以,我的想法是,当管理员设置竞价的开始日期和结束日期时,我想动态创建一个计划作业,它将自动运行存储的proc,当日期等于结束日期时,将更新每个记录。

有可能吗?

我想的另一种方式是,在竞价页面上放置一个检查器,它将不断与数据库检查竞价时间,如果它检测到竞价已经结束,它将自动执行一个存储的过程,更新每个用户记录?这种方法让我害怕的是,如果有很多用户正在访问页面,那么现在很多用户都会调用这个存储的proc。

非常感谢您的任何建议。

EN

回答 2

Stack Overflow用户

发布于 2020-03-16 12:12:29

  1. 在对象资源管理器中,连接到数据库引擎的实例。
  2. 在“标准”栏上,单击“新建查询”。
  3. 将以下示例复制并粘贴到查询窗口中,然后单击“执行”。

代码语言:javascript
复制
--Create job
USE msdb ;  
GO  

EXEC dbo.sp_add_job  
    @job_name = N'Weekly Sales Data Backup' ;  
GO  
代码语言:javascript
复制
--Add schedule to your job
EXEC msdb.dbo.sp_add_jobschedule 
        @job_name = N'Weekly Sales Data Backup', -- Job name
        @name = N'Weekly_Sat_2AM',  -- Schedule name
        @freq_type = 8, -- Weekly
        @freq_interval = 64, -- Saturday
        @freq_recurrence_factor = 1, -- every week
        @active_start_time = 20000 -- 2:00 AM
代码语言:javascript
复制
-- creates a job step that uses Transact-SQL  
USE msdb;  
GO  
EXEC sp_add_jobstep  
    @job_name = N'Weekly Sales Data Backup',  
    @step_name = N'Set database to read only',  
    @subsystem = N'TSQL',  
    @command = N'ALTER DATABASE SALES SET READ_ONLY',   
    @retry_attempts = 5,  
    @retry_interval = 5 ;  
GO  

完整的sp_add_jobstep参数列表

代码语言:javascript
复制
sp_add_jobstep [ @job_id = ] job_id | [ @job_name = ] 'job_name'   
     [ , [ @step_id = ] step_id ]   
     { , [ @step_name = ] 'step_name' }   
     [ , [ @subsystem = ] 'subsystem' ]   
     [ , [ @command = ] 'command' ]   
     [ , [ @additional_parameters = ] 'parameters' ]   
          [ , [ @cmdexec_success_code = ] code ]   
     [ , [ @on_success_action = ] success_action ]   
          [ , [ @on_success_step_id = ] success_step_id ]   
          [ , [ @on_fail_action = ] fail_action ]   
          [ , [ @on_fail_step_id = ] fail_step_id ]   
     [ , [ @server = ] 'server' ]   
     [ , [ @database_name = ] 'database' ]   
     [ , [ @database_user_name = ] 'user' ]   
     [ , [ @retry_attempts = ] retry_attempts ]   
     [ , [ @retry_interval = ] retry_interval ]   
     [ , [ @os_run_priority = ] run_priority ]   
     [ , [ @output_file_name = ] 'file_name' ]   
     [ , [ @flags = ] flags ]   
     [ , { [ @proxy_id = ] proxy_id   
         | [ @proxy_name = ] 'proxy_name' } ]  
票数 1
EN

Stack Overflow用户

发布于 2020-03-16 12:34:16

我认为,一旦投标时间结束,系统通知投标人是更好的方法,原因如下:

  • 是每个bid一次,而不是每次bid多个调用,并且不会影响system
  • 的性能,因为它是系统驱动的,用户不能尝试使用多个不必要的调用使系统过载。

我不建议你去找有活力的工作。原因是:

  • 为每个出价创建一个动态作业,将使系统有大量的作业和难以维护的
  • 您需要有一个单独的内务脚本来清理作业,一旦作业完成

我建议你找一份频率很短的静态工作

  • 即使您可以满足30秒的延迟,您甚至可以安排作业的频率高达30秒,这将看到过去30秒内完成的出价,并向投标人发送更新。我不确定如何才能减少这一点。

Read more on job schedule frequency in SO post

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60699981

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档