请教sql server中定时作业的问题

sklquickly 2007-11-29 07:23:09
现有一张表gbmx('ID','item1')每天向表中逐条添加大量数据。
现建立1张新表,table1('item1'),表中只包含主表gbmx中的一项,并且在新表中item1不重复。(在主表中item可以重复)
现在想每隔一段时间(1小时)检查主表中有没有插入items不存在于table1中的新项,如有则在table1中添加。
例如主表中数据
ID item1
101 aaa
102 bbb
103 aaa
104 ccc
table1中数据
item1
aaa
bbb
ccc
如果此时主表中插入('105','aaa')则table1不进行修改,如果插入('106','ddd')则在新表中添加('ccc')。
望大家不吝赐教!
...全文
87 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
dawugui 2007-11-30
  • 打赏
  • 举报
回复
--使用作业定时启停数据库的示例
IF EXISTS(SELECT * FROM msdb.dbo.sysjobs WHERE name='启用pubs数据库')
EXEC msdb.dbo.sp_delete_job @job_name='启用pubs数据库'

--定义创建作业
DECLARE @jobid uniqueidentifier
EXEC msdb.dbo.sp_add_job
@job_name = N'启用pubs数据库',
@job_id = @jobid OUTPUT

--定义作业步骤
DECLARE @sql nvarchar(400),@dbname sysname
SELECT @dbname=N'master', --数据库联机或者脱机只能在master数据库中进行
@sql=N'ALTER DATABASE pubs SET ONLINE' --使用pubs数据库联机(启用)
EXEC msdb.dbo.sp_add_jobstep
@job_id = @jobid,
@step_name = N'启用pubs数据库处理',
@subsystem = 'TSQL',
@database_name=@dbname,
@command = @sql

--创建调度(使用后面专门定义的几种作业调度模板)
EXEC msdb..sp_add_jobschedule
@job_id = @jobid,
@name = N'启用pubs数据库处理调度',
@freq_type=4,
@freq_interval=1,
@freq_subday_type=0x1,
@freq_subday_interval=1,
@active_start_time = 075000 --每天07:50分执行

--添加目标服务器
DECLARE @servername sysname
SET @servername=CONVERT(nvarchar(128),SERVERPROPERTY(N'ServerName'))
EXEC msdb.dbo.sp_add_jobserver
@job_id = @jobid,
@server_name = @servername
sklquickly 2007-11-30
  • 打赏
  • 举报
回复
非常感谢各位的热情回答!
设置的分数太少,有点对不起大家,现在也不允许加分,^-^
elvis_gao 的作业可以完成功能
pt1314917 的触发器也可以,但是作业有点问题,没有进行更新,另请问"from gbmx a "中的a是什么意思?
dawugui 给出了代码写的作业,现在正在研究。
最后再次感谢大家的热心帮忙!
elvis_gao 2007-11-30
  • 打赏
  • 举报
回复
from gbmx a 中的a是表gbmx 的别称,如潇洒老乌龟在坛子里用老乌龟代替一个道理
-狙击手- 2007-11-29
  • 打赏
  • 举报
回复
接分 了,支持楼上这个

正如楼上所言,建触发器就可以达到楼主的目的,而且更方便
create trigger wsp on gbmx for insert
as
insert into table1(item1) select item1 from inserted a
where not exists(select 1 from table1 where item1=a.item1)


企业管理器
--管理
--SQL Server代理
--右键作业
--新建作业
--"常规"项中输入作业名称
--"步骤"项
--新建
--"步骤名"中输入步骤名
--"类型"中选择"Transact-SQL 脚本(TSQL)"
--"数据库"选择执行命令的数据库
--"命令"中输入要执行的语句:
insert into table1(item1) select item1 from gbmx a where not exists(select 1 from table1 where item1=a.item1)
--确定
--"调度"项
--新建调度
--"名称"中输入调度名称
--"调度类型"中选择你的作业执行安排
--如果选择"反复出现"
--点"更改"来设置你的时间安排


然后将SQL Agent服务启动,并设置为自动启动,否则你的作业不会被执行

设置方法:
我的电脑--控制面板--管理工具--服务--右键 SQLSERVERAGENT--属性--启动类型--选择"自动启动"--确定.
pt1314917 2007-11-29
  • 打赏
  • 举报
回复
正如楼上所言,建触发器就可以达到楼主的目的,而且更方便
create trigger wsp on gbmx for insert
as
insert into table1(item1) select item1 from inserted a
where not exists(select 1 from table1 where item1=a.item1)

另外楼主如果非要图麻烦去用作业,也可以:
建好作业,并设置每个小时执行一次。
SQL语句:insert into table1(item1) select item1 from gbmx a where not exists(select 1 from table1 where item1=a.item1)
winstonbonaparte 2007-11-29
  • 打赏
  • 举报
回复
可以在gbmx表上建个触发器,如果有数据插入就检查一下吧
elvis_gao 2007-11-29
  • 打赏
  • 举报
回复

用作业的方式可以,先建作业,设置好属性,让后在sql脚本中写
insert into table1(item1)
select item1
from gbmx
where
item1 not in(select item1 from table1)
elvis_gao 2007-11-29
  • 打赏
  • 举报
回复
有触发器多好呀,表gbmx插入一条记录,同时向table1表中插入一条记录,也可以在gbmx中增加一个标识字段,如字段为1,插入,字段为0不插入,每次插入将字段置为0。

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧