软件开发中 SQL SERVER 任务的用法
在软件开发中,经常性会用到定时任务。这个时候你可能会想到线程。但是事实中,线程方法比较麻烦、容易出错,资源竞争等问题,设计起来让你很头痛。
现在给大家提供一个新的思路,用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 任务的用法的更多相关文章
- Atitit 软件开发中 瓦哈比派的核心含义以及修行方法以及对我们生活与工作中的指导意义
Atitit 软件开发中 瓦哈比派的核心含义以及修行方法以及对我们生活与工作中的指导意义 首先我们指明,任何一种行动以及教派修行方法都有他的多元化,只看到某一方面,就不能很好的评估利弊,适不适合自己使 ...
- win7中 SQL server 2005无法连接到服务器,错误码:18456
win7中 SQL server 2005无法连接到服务器,错误码:18456.. 数据库刚装完.我用Windows登陆 结果登陆不上去.. 选中SQL Server Management Stud ...
- 软件开发中的完整测试所包括的环节UT、IT、ST、UAT
软件开发中的完成测试环境所包括的环节包括:UT.IT.ST.UAT UT = Unit Test 单元测试 IT = System Integration Test 集成测试ST = System T ...
- paip.java 开发中web server的选择jboss resin tomcat比较..
paip.java 开发中web server的选择jboss resin tomcat比较.. 作者Attilax 艾龙, EMAIL:1466519819@qq.com 来源:attilax的专 ...
- 关于软件开发中兼容win7注册表的解决方案
关于软件开发中兼容win7注册表的解决方案 编写人:CC阿爸 2014-3-14 l 近来在开发一winform程序时,发现在xp 系统访问注册表一切正常.可偏这个时候,微软又提醒大家.Xp今年 ...
- Atitit. 软件开发中的管理哲学--一个伟大的事业必然是过程导向为主 过程导向 vs 结果导向
Atitit. 软件开发中的管理哲学--一个伟大的事业必然是过程导向为主 过程导向 vs 结果导向 1. 一个伟大的事业必然是过程导向为主 1 1.1. 过程的执行情况(有明确的执行手册及标准) ...
- UML在软件开发中各个阶段的作用和意义
经典的软件工程思想将软件开发分成5个阶段:需求分析,系统分析与设计,系统实现,测试及维护五个阶段. 之所以如此,是因为软件开发中饣含了物和人的因素,存在着很大的不确定性,这使得软件工程不可能像理想的, ...
- Java软件开发中迭代的含义
软件开发中,各个开发阶段不是顺序执行的,而各个阶段都进行迭代并行执行的,然后在进入下一个阶段的开发. 这样对于开发中的需求变化,及人员变动都能得到更好的适应. 软件开发过程汇总迭代模型如下图所示:
- 软件开发中oracle查询常用方法总结
上次新霸哥和大家讲解了一些关于oracle的知识发现大家对oracle还是比较感兴趣的,下面新霸哥就大家比较关系的oracle中常用的查询有哪几种?做个和oracle相关的开发的朋友可能会知道答案,但 ...
随机推荐
- RTX二次开发SDK需要注意的地方
1.如果是ASP.net二次开发调用的,线程池必须开发 Enable 32-bit Applications设置为true. 因为RTX的调用接口很多是32位的.否则会报一下错误 RootObj = ...
- 一: Introduction(介绍)
Welcome to SQLBackupRestore.com, your online resource for SQL Server backup and recovery issues. Th ...
- MOSS 2007 错误0x80040E14解决
今天公司内网莫名的出现错误,只能新建列表条目,不能创建网站,到后来列表条目也不能创建了,一直报0x80040E14错误.于是Google一把,搜索这个错误号,然后在apearce 的Blog找到了原因 ...
- winform下利用webBrowser执行javascript
目前很多网站为了防止恶意提交表单信息,大多都采用了加密的方式对提交信息进行处理,加密处理后通过POST提交给服务器验证,这种操作一般都是用Javascipt进行加密,若是我们想要正确提交表单到网站,就 ...
- 了解一些dos常用命令
备注:[] ——可选项 <>——必填项 DOS 特殊命令应用技巧: 向上箭头“↑”和向下箭头“↓”——回看上一次执行的命令 "Ctrl+C"组合——中断操作 在命令 ...
- “2017面向对象程序设计(Java)第十三周学习总结”存在问题的反馈及本周教学安排
“2017面向对象程序设计(Java)第十三周学习总结”存在问题的反馈及本周教学安排1. 图形界面事件处理技术是Java GUI编程核心技术,要求同学们掌握其基本原理和基本编程模型:2. 本周四理论课 ...
- macaca自动化测试以及配置环境问题
macaca 测试和环境问题 标签(空格分隔): macaca自动化配置环境问题 macaca环境变量配置 基本环境需要准备的东西: JDK的安装及环境配置:(1.8) Node.js的安装及环境配置 ...
- javascript基础:函数参数与闭包问题
今天在写东西的时候,对函数参数的概念有些模糊,查阅相关资料后,在博客上记点笔记,方便日后复习. 首先,在js中函数参数并没有强语言中那么要求严格,他不介意传递进来多少个参数,也不在乎传进来的参数是什么 ...
- 数论----gcd和lcm
gcd即最大公约数,lcm即最小公倍数. 首先给出a×b=gcd×lcm 证明:令gcd(a,b)=k,a=xk,b=yk,则a×b=x*y*k*k,而lcm=x*y*k,所以a*b=gcd*lcm. ...
- Android 单元测试四大组件Activity,Service,Content Provider , Broadcast Receiver
先mark, 后补充 https://blog.csdn.net/stevenhu_223/article/details/14054313 https://www.jianshu.com/p/3aa ...