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)' 

解决方案 »

  1.   

    --对于第1个问题,这样修改触发器就行了:--触发器
    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 监测数据_心电表
      

  2.   


    --插入时指定专家就可以了--测试--测试数据
    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 行)--*/