2.建立一个完整的作业需要经过下面的步骤,你应该少了最后一个步骤--创建作业
exec msdb..sp_add_job @job_name='数据处理'--创建作业步骤
declare @sql varchar(800),@dbname varchar(250)
select @sql='exec p_createxml' --数据处理的命令
,@dbname=db_name() --执行数据处理的数据库名exec msdb..sp_add_jobstep @job_name='数据处理',
@step_name = '数据同步',
@subsystem = 'TSQL',
@database_name=@dbname,
@command = @sql,
@retry_attempts = 5, --重试次数
@retry_interval = 5 --重试间隔--创建调度
EXEC msdb..sp_add_jobschedule @job_name = '数据处理',
@name = '时间安排',
@freq_type=4, --4 每天,8 每周,16 每月
@freq_interval=1, --作业执行的天数
@freq_subday_type=0, --是否重复执行,0x1 在指定的时间, 0x4 分钟, 0x8 小时
@freq_subday_interval=1, --重复周期
@freq_recurrence_factor=0, --重复执行,则设置为1,否则设置为0
@active_start_time = 00000 --0点开始执行-- 添加目标服务器
EXEC msdb.dbo.sp_add_jobserver
@job_name = '数据处理' ,
@server_name = N'(local)'
exec msdb..sp_add_job @job_name='数据处理'--创建作业步骤
declare @sql varchar(800),@dbname varchar(250)
select @sql='exec p_createxml' --数据处理的命令
,@dbname=db_name() --执行数据处理的数据库名exec msdb..sp_add_jobstep @job_name='数据处理',
@step_name = '数据同步',
@subsystem = 'TSQL',
@database_name=@dbname,
@command = @sql,
@retry_attempts = 5, --重试次数
@retry_interval = 5 --重试间隔--创建调度
EXEC msdb..sp_add_jobschedule @job_name = '数据处理',
@name = '时间安排',
@freq_type=4, --4 每天,8 每周,16 每月
@freq_interval=1, --作业执行的天数
@freq_subday_type=0, --是否重复执行,0x1 在指定的时间, 0x4 分钟, 0x8 小时
@freq_subday_interval=1, --重复周期
@freq_recurrence_factor=0, --重复执行,则设置为1,否则设置为0
@active_start_time = 00000 --0点开始执行-- 添加目标服务器
EXEC msdb.dbo.sp_add_jobserver
@job_name = '数据处理' ,
@server_name = N'(local)'
create trigger tr_insert on 监测数据_心电表
after insert
as
update 监测数据_心电表 set 指定专家=b.替代专家
from 监测数据_心电表 a join(
select b.数据编号,替代专家=case when exists(
select 1 from 专家考勤表
where 专家ID=a.替代专家
and 缺勤开始时间<b.上传时间
and b.上传时间<缺勤截止时间
) then (
select 主治医师 from 用户表
where 用户ID=b.用户ID
)else 替代专家 end
from 专家考勤表 a join(
select 指定专家=case isnull(b.指定专家,'') when '' then a.主治医师 else b.指定专家 end
,b.用户ID,b.数据编号,b.上传时间
from 用户表 a
join inserted b on a.用户ID=b.用户ID
)b on a.专家ID=b.指定专家
where a.缺勤开始时间<b.上传时间
and b.上传时间<a.缺勤截止时间
)b on a.数据编号=b.数据编号
go--插入数据测试
insert 监测数据_心电表 select 32558,2,'2004-3-30 12:08:53',null
go--显示处理结果
select * from 监测数据_心电表
--插入时指定专家就可以了--测试--测试数据
create table 专家考勤表(记录号 int,专家ID char(4),缺勤开始时间 datetime,缺勤截止时间 datetime,替代专家 char(4))
insert 专家考勤表 select 1,'0005','2004-3-30 8:00:00','2004-3-31 8:00:00','0008'create table 监测数据_心电表(数据编号 int,用户ID int,上传时间 datetime,指定专家 char(4))create table 用户表(ID int,用户ID int,主治医师 char(4))
insert 用户表 select 48,2,'0005'
go--触发器
create trigger tr_insert on 监测数据_心电表
after insert
as
update 监测数据_心电表 set 指定专家=b.替代专家
from 监测数据_心电表 a join(
select b.数据编号,替代专家=case when exists(
select 1 from 专家考勤表
where 专家ID=a.替代专家
and 缺勤开始时间<b.上传时间
and b.上传时间<缺勤截止时间
) then (
select 主治医师 from 用户表
where 用户ID=b.用户ID
)else 替代专家 end
from 专家考勤表 a join(
select 指定专家=case isnull(b.指定专家,'') when '' then a.主治医师 else b.指定专家 end
,b.用户ID,b.数据编号,b.上传时间
from 用户表 a
join inserted b on a.用户ID=b.用户ID
)b on a.专家ID=b.指定专家
where a.缺勤开始时间<b.上传时间
and b.上传时间<a.缺勤截止时间
)b on a.数据编号=b.数据编号
go--插入数据测试
insert 监测数据_心电表 select 32558,2,'2004-3-30 12:08:53',null
go--显示处理结果
select * from 监测数据_心电表
go--删除测试
drop table 监测数据_心电表,专家考勤表,用户表/*--测试结果数据编号 用户ID 上传时间 指定专家
----------- ----------- --------------------------- ----
32558 2 2004-03-30 12:08:53.000 0008(所影响的行数为 1 行)--*/