在软件开发中,经常性会用到定时任务。这个时候你可能会想到线程。但是事实中,线程方法比较麻烦、容易出错,资源竞争等问题,设计起来让你很头痛。

现在给大家提供一个新的思路,用SQL SERVER 的任务管理器来解决问题。

解决下列问题:

1、商品有购买时间限制。比如定时上线,下线。竞拍结束自动通知用户。

2、数据库中某个数据发生了变化,需要执行一段代码块(这里面的代码并不是存储过程代码,意指c#,JAVA等代码)。

3、某个数据发生了变化,需要执行某个动作。(不是立马执行

针对上面的问题,我们总结出,该方案是以数据库中的数据发生改变,需要解决改变后的相关处理工作。

过去我们要完成这样的工作,我们必须要用到线程,来监控数据库的变化,根据变化来做相对应的处理。用线程的这种方法。我觉得远远不如用SQL SERVER任务这么简单高效。容易。

下面给出具体代码:

一、商品定时上线下线。

exec p_task @exeSql,@end_date,@end_time
update jp_shangpin set zhuangtai=1 where id=1

我指定要执行的时间。指定要执行的代码。这个代码实际就上改变一下一条数据的状态而已。

1、我要执行某个功能块如何办?(比如说,某个用户的费用快到期了,要发一条短信给用户,要发一条JPUSH给用户。如何办呢?)

exec p_url 'http://111.111.111.111/task.aspx?ssss=222=3333'

 

创立任务脚本:

GO
/****** Object: StoredProcedure [dbo].[p_task] Script Date: 01/25/2016 16:23:56 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER proc [dbo].[p_task]
@sql varchar(8000),--要执行的命令
@start_date int, --开始执行日期
@start_time int --开始执行时间
as declare @dbname varchar(100)
declare @jobname varchar(100) --作业名称 set @jobname=newid() set @dbname=db_name() --创建作业
exec msdb..sp_add_job @job_name=@jobname --创建作业步骤
exec msdb..sp_add_jobstep @job_name=@jobname,
@step_name = '数据处理',
@subsystem = 'TSQL',
@database_name=@dbname,
@command = @sql,
@retry_attempts = 5, --重试次数
@retry_interval = 5 --重试间隔 --创建调度
EXEC msdb..sp_add_jobschedule @job_name=@jobname,
@enabled=1,
@name = '时间安排',
@freq_type=1 ,
@active_start_date=@start_date,
@active_start_time=@start_time -- 添加目标服务器
EXEC msdb.dbo.sp_add_jobserver
@job_name = @jobname ,
@server_name = N'(local)' --作业完成自动删除
EXEC msdb.dbo.sp_update_job
@job_name = @jobname ,
@delete_level=1

SQL访问URL(有了这个功能你可以调用所有代码了。)

/****** Object:  StoredProcedure [dbo].[p_url]    Script Date: 01/25/2016 16:24:45 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER procedure [dbo].[p_url]
@url nvarchar(1000), --url地址
@value nvarchar(1000) out --值,如果指定为null,则获取application的值
as
declare @err int,@src varchar(255),@desc varchar(255)
declare @obj int,@urlstr nvarchar(4000),@function varchar(4) select @function=CASE WHEN @value IS NULL THEN 'GET' ELSE 'POST' END,
@urlstr=@url
+CASE WHEN @value IS NULL THEN '' ELSE N'&value='+rtrim(@value) END exec @err=sp_oacreate 'MICROSOFT.XMLHTTP',@obj out
if @err<>0 goto lberr exec @err=sp_oamethod @obj,'open',null,@function,@urlstr,0
if @err<>0 goto lberr exec @err=sp_oamethod @obj,'send',null,''
if @err<>0 goto lberr if @function='GET'
begin
exec @err=sp_oagetproperty @obj,'ResponseText',@value output
if @err<>0 goto lberr
end --print @value exec @err=sp_oadestroy @obj
return lberr:
exec sp_oageterrorinfo 0,@src out,@desc out
select cast(@err as varbinary(4)) as 错误号
,@src as 错误源,@desc as 错误描述

写的有些零散,改天我定会包装一下。争取把好处与原理讲的更清楚。

这里面的好处,与坏处你自己来体会。做过自然会懂的。

相关资料:

http://www.cnblogs.com/TTTT/archive/2009/12/23/1630265.html

软件开发中 SQL SERVER 任务的用法的更多相关文章

  1. Atitit 软件开发中 瓦哈比派的核心含义以及修行方法以及对我们生活与工作中的指导意义

    Atitit 软件开发中 瓦哈比派的核心含义以及修行方法以及对我们生活与工作中的指导意义 首先我们指明,任何一种行动以及教派修行方法都有他的多元化,只看到某一方面,就不能很好的评估利弊,适不适合自己使 ...

  2. win7中 SQL server 2005无法连接到服务器,错误码:18456

    win7中 SQL server 2005无法连接到服务器,错误码:18456.. 数据库刚装完.我用Windows登陆  结果登陆不上去.. 选中SQL Server Management Stud ...

  3. 软件开发中的完整测试所包括的环节UT、IT、ST、UAT

    软件开发中的完成测试环境所包括的环节包括:UT.IT.ST.UAT UT = Unit Test 单元测试 IT = System Integration Test 集成测试ST = System T ...

  4. paip.java 开发中web server的选择jboss resin tomcat比较..

    paip.java 开发中web server的选择jboss resin tomcat比较.. 作者Attilax  艾龙, EMAIL:1466519819@qq.com 来源:attilax的专 ...

  5. 关于软件开发中兼容win7注册表的解决方案

    关于软件开发中兼容win7注册表的解决方案   编写人:CC阿爸 2014-3-14 l  近来在开发一winform程序时,发现在xp 系统访问注册表一切正常.可偏这个时候,微软又提醒大家.Xp今年 ...

  6. Atitit. 软件开发中的管理哲学--一个伟大的事业必然是过程导向为主 过程导向 vs 结果导向

    Atitit. 软件开发中的管理哲学--一个伟大的事业必然是过程导向为主    过程导向 vs 结果导向 1. 一个伟大的事业必然是过程导向为主 1 1.1. 过程的执行情况(有明确的执行手册及标准) ...

  7. UML在软件开发中各个阶段的作用和意义

    经典的软件工程思想将软件开发分成5个阶段:需求分析,系统分析与设计,系统实现,测试及维护五个阶段. 之所以如此,是因为软件开发中饣含了物和人的因素,存在着很大的不确定性,这使得软件工程不可能像理想的, ...

  8. Java软件开发中迭代的含义

    软件开发中,各个开发阶段不是顺序执行的,而各个阶段都进行迭代并行执行的,然后在进入下一个阶段的开发. 这样对于开发中的需求变化,及人员变动都能得到更好的适应. 软件开发过程汇总迭代模型如下图所示:

  9. 软件开发中oracle查询常用方法总结

    上次新霸哥和大家讲解了一些关于oracle的知识发现大家对oracle还是比较感兴趣的,下面新霸哥就大家比较关系的oracle中常用的查询有哪几种?做个和oracle相关的开发的朋友可能会知道答案,但 ...

随机推荐

  1. 自定义 mapper的实现

    json格式,要想好看直接百度,json,将字符放进去就可 一步:将mapper复制一份,名字加一个Custom自定义 二步:mpper.xml也是一样,设置里面的namespace映射关系 自定义m ...

  2. Structs复习 OGNL

    Dominmodel只有传 User.age 类似的这种Structs才能帮创建对象 Dominmodel User里必须有空的构造方法 OGNL:OBJECT GRAPHIC NAVAGATION ...

  3. XML 可扩展标记语言

    因 为XML实在是太重要了,而且被广泛应用!不论是数据存储,还是其他方面,如配置文件等.XML是一种对独立于任何编程语言的数据进行编码的机制.在数据 交换领域,正在变得非常流行!因为他的基于节点的存储 ...

  4. JVM G1GC参数配置

    https://www.oracle.com/technetwork/articles/java/g1gc-1984535.html         主要这两个参数需要设置下,ParallelGCTh ...

  5. ubuntu下mysql源码编译安装

    建议:cpu4核以上,内存4G以上 1. 安装环境:Ubuntu Server 14.10MySQL-5.6.23.tar.gz 2. 安装必备的工具sudo apt-get install make ...

  6. flume kafka 配置指南

    1.官方网站也有配置: https://flume.apache.org/FlumeUserGuide.html#kafka-source 2.clodera 官方配置 https://www.clo ...

  7. 动态代理 JDK动态代理 CGLIB代理

    代理模式:代理类和被代理类实现共同的接口(或继承),代理类中存有指向被代理类的索引,实际执行时通过调用代理类的方法.实际执行的是被代理类的方法. 而AOP,是通过动态代理实现的. 一.简单来说: JD ...

  8. Mysql 数据库 创建与删除(基础2)

    创建数据库 语法: 注意:创建数据库时可以指定编码(如: create database mydb123 default charset utf8; ) pyvip@Vip:~$ mysql -uxl ...

  9. JMeter调试工具--Debug Sampler(转载)

    转载自 http://www.cnblogs.com/fengpingfan Debug Sampler添加路径:[添加 / Sampler / Debug Sampler],面板设置如下: 打开JM ...

  10. 【scrapy】其他问题2

    今天爬取豆瓣电影的是时候,出现了两个问题: 1.数据无法爬取并输出Retrying <GET https://movie.douban.com/robots.txt> 看起来像是被拦截了. ...