表A
name state qu date IsZuZhi
aa 2 武汉 2009-11-15 否
bb 1 广州 2009-11-18 否
cc 2 广州 2009-11-22 是
dd 2 北京 2009-11-22 否
ee 2 上海 2009-11-23 否
ff 1 武汉 2009-11-30 是表B
qu geRenTerm zuZhiTerm
武汉 10 15
广州 5 10
北京 10 20
上海 12 18
我想实现一个自动更新的功能,自动更新表A里的state
根据表A里的字段 qu 和 IsZuZhi 获取其对应的期限
例如记录 aa 的qu为“武汉”,IsZuZhi为“否”,state为 2 (只需改动state为2的记录)
则对应的期限为 10(天)
那么就用对应的 date 加上 10 (天)
如果得到的时间小于当前系统的时间
则将其 state 改为 0 根据此要求更新过的结果为:(表A)
name state qu date IsZuZhi
aa 0 武汉 2009-11-15 否
bb 1 广州 2009-11-18 否
cc 0 广州 2009-11-22 是
dd 0 北京 2009-11-22 否
ee 0 上海 2009-11-23 否
ff 1 武汉 2009-11-30 是如果看上面的描述还是不太明白
我就说下大致的流程:
某个人(name)在自己所属的城市(qu)申请一台空调
记录当前时间(date),并填写自己是否属于组织(IsZuZhi),初始状态为 1
当上级审核通过后,会改变date为当前更新的时间,状态改为 2
如果这个人在规定的时间内((表B)
武汉(qu)个人的期限(geRenTerm)是 10(天),组织的期限(zuZhiTerm)是 15(天))
没有去领这台空调,到时间就自动改变这挑记录的状态(改为0),作废这个问题主要有两点:
更新语句的编写;自动更新哪位大哥明白我的意思
帮我解决下
谢谢
name state qu date IsZuZhi
aa 2 武汉 2009-11-15 否
bb 1 广州 2009-11-18 否
cc 2 广州 2009-11-22 是
dd 2 北京 2009-11-22 否
ee 2 上海 2009-11-23 否
ff 1 武汉 2009-11-30 是表B
qu geRenTerm zuZhiTerm
武汉 10 15
广州 5 10
北京 10 20
上海 12 18
我想实现一个自动更新的功能,自动更新表A里的state
根据表A里的字段 qu 和 IsZuZhi 获取其对应的期限
例如记录 aa 的qu为“武汉”,IsZuZhi为“否”,state为 2 (只需改动state为2的记录)
则对应的期限为 10(天)
那么就用对应的 date 加上 10 (天)
如果得到的时间小于当前系统的时间
则将其 state 改为 0 根据此要求更新过的结果为:(表A)
name state qu date IsZuZhi
aa 0 武汉 2009-11-15 否
bb 1 广州 2009-11-18 否
cc 0 广州 2009-11-22 是
dd 0 北京 2009-11-22 否
ee 0 上海 2009-11-23 否
ff 1 武汉 2009-11-30 是如果看上面的描述还是不太明白
我就说下大致的流程:
某个人(name)在自己所属的城市(qu)申请一台空调
记录当前时间(date),并填写自己是否属于组织(IsZuZhi),初始状态为 1
当上级审核通过后,会改变date为当前更新的时间,状态改为 2
如果这个人在规定的时间内((表B)
武汉(qu)个人的期限(geRenTerm)是 10(天),组织的期限(zuZhiTerm)是 15(天))
没有去领这台空调,到时间就自动改变这挑记录的状态(改为0),作废这个问题主要有两点:
更新语句的编写;自动更新哪位大哥明白我的意思
帮我解决下
谢谢
if object_id('[表A]') is not null drop table [表A]
create table [表A]([name] varchar(2),[state] int,[qu] varchar(4),[date] datetime,[IsZuZhi] varchar(2))
insert [表A]
select 'aa',2,'武汉','2009-11-15','否' union all
select 'bb',1,'广州','2009-11-18','否' union all
select 'cc',2,'广州','2009-11-22','是' union all
select 'dd',2,'北京','2009-11-22','否' union all
select 'ee',2,'上海','2009-11-23','否' union all
select 'ff',1,'武汉','2009-11-30','是'
--> 测试数据:[表B]
if object_id('[表B]') is not null drop table [表B]
create table [表B]([qu] varchar(4),[geRenTerm] int,[zuZhiTerm] int)
insert [表B]
select '武汉',10,15 union all
select '广州',5,10 union all
select '北京',10,20 union all
select '上海',12,18--select * from [表B]
--select * from [表A]update [表A]
set [state] = case when
convert(varchar(10),dateadd(day,t.[geRenTerm],date),120)< convert(varchar(10),getdate(),120)
then 0 else [state] end
from [表A] r join [表B] t on
r.qu = t.qu
where r.[state] = 2select * from [表A]
--结果
-------------------------------------
aa 0 武汉 2009-11-15 00:00:00.000 否
bb 1 广州 2009-11-18 00:00:00.000 否
cc 0 广州 2009-11-22 00:00:00.000 是
dd 0 北京 2009-11-22 00:00:00.000 否
ee 0 上海 2009-11-23 00:00:00.000 否
ff 1 武汉 2009-11-30 00:00:00.000 是
--还要考虑是否组织
--> 测试数据:[表A]
if object_id('[表A]') is not null drop table [表A]
create table [表A]([name] varchar(2),[state] int,[qu] varchar(4),[date] datetime,[IsZuZhi] varchar(2))
insert [表A]
select 'aa',2,'武汉','2009-11-15','否' union all
select 'bb',1,'广州','2009-11-18','否' union all
select 'cc',2,'广州','2009-11-22','是' union all
select 'dd',2,'北京','2009-11-22','否' union all
select 'ee',2,'上海','2009-11-23','否' union all
select 'ff',1,'武汉','2009-11-30','是'
--> 测试数据:[表B]
if object_id('[表B]') is not null drop table [表B]
create table [表B]([qu] varchar(4),[geRenTerm] int,[zuZhiTerm] int)
insert [表B]
select '武汉',10,15 union all
select '广州',5,10 union all
select '北京',10,20 union all
select '上海',12,18--select * from [表B]
--select * from [表A]update [表A]
set [state] = case when
convert(varchar(10),dateadd(day,(case [IsZuZhi] when '否' then t.[geRenTerm] else [zuZhiTerm] end),date),120)
< convert(varchar(10),getdate(),120)
then 0 else [state] end
from [表A] r join [表B] t on
r.qu = t.qu
where r.[state] = 2select * from [表A]
--结果
-----------------------------------------
aa 0 武汉 2009-11-15 00:00:00.000 否
bb 1 广州 2009-11-18 00:00:00.000 否
cc 0 广州 2009-11-22 00:00:00.000 是
dd 0 北京 2009-11-22 00:00:00.000 否
ee 0 上海 2009-11-23 00:00:00.000 否
ff 1 武汉 2009-11-30 00:00:00.000 是
--管理
--SQL Server代理
--右键作业
--新建作业
--"常规"项中输入作业名称
--"步骤"项
--新建
--"步骤名"中输入步骤名
--"类型"中选择"Transact-SQL 脚本(TSQL)"
--"数据库"选择执行命令的数据库
--"命令"中输入要执行的语句:
EXEC 存储过程名 ... --该存储过程用于创建表 --确定
--"调度"项
--新建调度
--"名称"中输入调度名称
--"调度类型"中选择你的作业执行安排
--如果选择"反复出现"
--点"更改"来设置你的时间安排
然后将SQL Agent服务启动,并设置为自动启动,否则你的作业不会被执行 设置方法:
我的电脑--控制面板--管理工具--服务--右键 SQLSERVERAGENT--属性--启动类型--选择"自动启动"--确定.
qu nvarchar(10),date datetime,iszuzhi nvarchar(10))
insert into @A select 'aa',2,'武汉','2009-11-15','否'
union all select 'bb',1,'广州','2009-11-18','否'
union all select 'cc',2,'广州','2009-11-22','是'
union all select 'dd',2,'北京','2009-11-22','否'
union all select 'ee',2,'上海','2009-11-23','否'
union all select 'ff',1,'武汉','2009-11-30','是'
declare @B table (qu nvarchar(10),gerenterm int,zuzhiterm int)
insert into @B select '武汉',10,15
union all select '广州',5,10
union all select '北京',10,20
union all select '上海',12,18
update a set state= case when dateadd(dd,b.gerenterm,a.date)<getdate() then 0 else state end
from @A a join @b b on a.qu=b.qu
where state=2
select * from @A
/*(6 行受影响)(4 行受影响)(4 行受影响)
name state qu date iszuzhi
---------- ----------- ---------- ----------------------- ----------
aa 0 武汉 2009-11-15 00:00:00.000 否
bb 1 广州 2009-11-18 00:00:00.000 否
cc 0 广州 2009-11-22 00:00:00.000 是
dd 0 北京 2009-11-22 00:00:00.000 否
ee 0 上海 2009-11-23 00:00:00.000 否
ff 1 武汉 2009-11-30 00:00:00.000 是(6 行受影响)*/