根据表中记录的变化情况自动维护作业

原创 2004年08月07日 22:22:00

 

/*--作业处理实例

    根据 sendTab 的 SendTime 定制作业
    并且在该作业完成时,可以自动删除作业
--邹建 2004.04(引用请保留此信息)--
*/


--示例

--测试表
CREATE TABLE dbo.sendTab(
    ID 
int IDENTITY(1,1),
    Name 
nvarchar(10),
    SendTime 
datetime,
    AcceptUnit 
varchar(10),
    SendUnit 
varchar(10),
    Content 
nvarchar(4000)
)

CREATE TABLE dbo.accepteTab(
    ID 
int IDENTITY(1,1),
    Name 
nvarchar(10),
    SendUnit 
varchar(10),
    AcceptUnit 
varchar(10),
    Content 
nvarchar(4000)
)
GO

--创建处理的存储过程
CREATE PROC dbo.p_JobSet
    
@id int,            --要处理的sendTab的id
    @is_delete bit=0    --是否仅删除,为0则否,为1则是
AS
DECLARE
    
@dbname sysname,
    
@jobname sysname,
    
@date int,
    
@time int

-- job 名称及运行时间
SELECT 
    
@jobname = N'定时发送作业_' + CAST(@id as nvarchar),
    
@date = CONVERT(varchar, SendTime, 112),
    
@time = REPLACE(CONVERT(varchar, SendTime, 108), ':''')
FROM dbo.sendTab
WHERE id = @id

-- 如果 job 已经存在, 则删除
IF EXISTS(
        
SELECT 1 FROM msdb.dbo.sysjobs
        
WHERE name = @jobname)
    
EXEC msdb.dbo.sp_delete_job
            
@job_name = @jobname 

IF @is_delete = 1
    
RETURN

-- 创建job
EXEC msdb.dbo.sp_add_job
    
@job_name = @jobname,
    
@delete_level = 1

-- 创建 job 步骤
DECLARE
    
@sql varchar(800)
SELECT
    
@sql = N' -- job 要实现的操作
INSERT dbo.accepteTab(
    name,SendUnit,AcceptUnit,Content)
SELECT
    name,AcceptUnit,SendUnit,Content
FROM dbo.sendTab
WHERE id = 
' 
        
+ CAST(@id as varchar),
    
@dbname = DB_NAME()

EXEC msdb.dbo.sp_add_jobstep
    
@job_name = @jobname,
    
@step_name = N'发送处理步骤',
    
@subsystem = 'TSQL',
    
@database_name = @dbname,
    
@command = @sql,
    
@retry_attempts = 5,         --重试次数
    @retry_interval = 5          --重试间隔

-- 创建调度
EXEC msdb.dbo.sp_add_jobschedule
    
@job_name = @jobname
    
@name = N'时间安排',
    
@enabled = 1
    
@freq_type = 1
    
@active_start_date = @date,
    
@active_start_time = @time

-- 添加目标服务器
EXEC msdb.dbo.sp_add_jobserver 
    
@job_name = @jobname ,
    
@server_name = N'(local)' 
go

-- 创建处理的触发器(新增/修改)
CREATE TRIGGER tr_insert_update 
    
ON dbo.sendTab
FOR INSERT,UPDATE
AS
DECLARE 
    
@id int
DECLARE tb CURSOR LOCAL
FOR
SELECT
    id
FROM inserted
OPEN tb
FETCH tb INTO @id
while @@fetch_status=0
BEGIN
    
EXEC dbo.p_JobSet
        
@id = @id
    
    
FETCH tb INTO @id
END
CLOSE tb
DEALLOCATE tb
go

-- 创建处理的触发器(删除)
CREATE TRIGGER tr_delete
    
ON dbo.sendTab
FOR DELETE
AS
DECLARE
    
@id int
DECLARE tb CURSOR LOCAL
FOR
SELECT
    id
FROM deleted
OPEN tb
FETCH tb INTO @id
WHILE @@FETCH_STATUS=0
BEGIN
    
EXEC dbo.p_JobSet
        
@id = @id,
        
@is_delete = 1

    
FETCH tb INTO @id
END
CLOSE tb
DEALLOCATE tb
go

-- 测试(每个步骤做完后, 可以看看 job 是否建立, 在时间到之后, 可以看看 Job 是否被自动删除, 并且 dbo.accepteTab 是否有记录)

-- a. 插入数据
INSERT dbo.sendTab
SELECT N'文书1'DATEADD(s, 1GETDATE()), 'UnitA''UnitB', N'txt' UNION ALL
SELECT N'文书2'DATEADD(d, 1GETDATE()), 'UnitA''UnitB', N'txt' UNION ALL
SELECT N'文书3'DATEADD(m, 1GETDATE()), 'UnitA''UnitB', N'txt'

-- b. 修改
UPDATE dbo.sendTab SET
    name 
= N'档案1',
    SendTime 
= DATEADD(s, 5GETDATE())
WHERE id = 2

-- c. 删除
DELETE dbo.sendtab
WHERE id = 3
GO

-- 删除测试
DROP TABLE dbo.sendTab, dbo.accepteTab
DROP PROC dbo.p_JobSet

相关文章推荐

根据表中记录的变化情况自动维护作业

 /*--作业处理实例    根据 sendTab 的 SendTime 定制作业    并且在该作业完成时,可以自动删除作业*/--示例--测试表CREATE TABLE dbo.sendTab( ...

LTE系统调试记录11:测试经过射频后接收端波形时偏变化情况

1.FPGA版本为:aif_test_nomal_2ant_IF_30M72_ul_fir_old_rx_increase3db 发送端DA输出信号幅值:...

用gdb跟踪函数栈桢的变化情况

http://blog.chinaunix.net/space.php?uid=10167808&do=blog&id=26034 代码如下: #include void hello(...
  • diy534
  • diy534
  • 2011年11月15日 02:08
  • 446

Android利用广播监听设备网络连接(断网)的变化情况

MainActivity如下: package cc.testnetworkchange; import android.os.Bundle; import android.app.Activity...
  • lfdfhl
  • lfdfhl
  • 2014年06月05日 08:41
  • 2437

关于自增或自减符号在自变量两侧时,在条件循环语句中变化情况

话不多说, 先看例子(条件为i++时): #include int main(void) { int i = 0; char arr[5] = "abcd"; while (arr[i++]...

函数调用时堆栈的变化情况

函数的正常运行必然要利用堆栈,至少,函数的返回地址是保存在堆栈上的。函数一般要利用参数,而且内部也会用到局部变量,在对表达式进行求值时,编译器还会生成一些无名临时对象,这些对象都是存放在堆栈上的。下面...

总结:不同编译器下——数据类型的长度变化情况

分辨不同编译器下不同数据类型的实际长度
  • bi_mang
  • bi_mang
  • 2016年07月04日 22:31
  • 701

CSS列表和一些变化情况

一 基本CSS列表 ul.disc {list-style-type: disc} ul.circle {list-style-type: circle} ul.square {lis...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:根据表中记录的变化情况自动维护作业
举报原因:
原因补充:

(最多只允许输入30个字)