百分求解决办法..存储过程或触发器

denghan 2004-08-18 09:50:20
数据库MSSQL2000
明细表
----------------------------------------
userID 用户ID c(15)
classID 栏目代码 c(3)
startDT 定阅时间 (时间格式:yyyymmdd 的字符串形式)
cancelDT 取消时间 (时间格式:yyyymmdd 的字符串形式)

类别表
---------------------------------------
classID 类别编号
className 类别名称

日志表
----------------------------------------
logid 自动编号
log_day 日期 (时间格式:yyyymmdd 的字符串形式)
classid 栏目代码
DZusers 定阅用户数 int
QXusers 取消用户数 int


希望把明细表的数据按天导入到日志表里,
id 日期 栏目代码 定阅人数 取消人数
----------------------------------------
1 20040818 101 100 25
2 20040818 102 99 31
..
100 20040819 101 10 53

要求
1.由于明细表里有近一年的记录,要把明细表里的记录按上述要求生成统计日志存储到日志表里
2.以后每天的23:59:59执行一个过程:把当天的各栏目的统计数据加到日志表里

以上功能是该用存储过程还是触发器来做?
小弟初学SQL2000,水平太菜,对于存储过程的触发器的了解还处于帮助文档的学习阶段。
请各位大侠多多帮忙 。百分感谢!
...全文
137 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
wyr521 2004-08-22
  • 打赏
  • 举报
回复
fglkdsgjvklsd
denghan 2004-08-18
  • 打赏
  • 举报
回复
好专业啊~~!谢谢!
先试试
zjcxc 元老 2004-08-18
  • 打赏
  • 举报
回复
--然后,再创建定时进行数据处理的作业,实现
--以后每天的23:59:59执行一个过程:把当天的各栏目的统计数据加到日志表里

--设置 SQL Agent 服务为自动启动
exec msdb..sp_set_sqlagent_properties @auto_start=1
go

--创建作业
exec msdb..sp_add_job @job_name='数据处理'

--创建作业步骤
declare @sql varchar(800),@dbname varchar(250)
select @sql=' --当天的各栏目的统计数据加到日志表里的处理
declare @dt char(8)
select @dt=convert(char(8),getdate(),112)

insert 日志表(log_day,classid,DZusers,QXusers)
select log_day=isnull(b.startDT,c.cancelDT)
,a.classID
,DZusers=isnull(b.DZusers,0)
,QXusers=isnull(c.QXusers,0)
from 类别表 a
left join(
select classID,startDT,DZusers=count(*)
from 明细表
where startDT=@dt
group by classID
)b on a.classID=b.classID
left join(
select classID,cancelDT,QXusers=count(*)
from 明细表
where cancelDT=@dt
group by classID,cancelDT
)c on a.classID=c.classID
'
,@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,
@freq_interval=1,
@freq_subday_type=0,
@freq_subday_interval=1,
@freq_recurrence_factor=0,
@active_start_time = 235959 --每天23:59:59执行

-- 添加目标服务器
EXEC msdb.dbo.sp_add_jobserver
@job_name = '数据处理' ,
@server_name = N'(local)'
zjcxc 元老 2004-08-18
  • 打赏
  • 举报
回复
--首先做初始化(在定时处理之前)

insert 日志表(log_day,classid,DZusers,QXusers)
select log_day=isnull(b.startDT,c.cancelDT)
,a.classID
,DZusers=isnull(b.DZusers,0)
,QXusers=isnull(c.QXusers,0)
from 类别表 a
left join(
select classID,startDT,DZusers=count(*)
from 明细表
group by classID,startDT
)b on a.classID=b.classID
left join(
select classID,cancelDT,QXusers=count(*)
from 明细表
group by classID,cancelDT
)c on a.classID=c.classID
and b.startDT=c.cancelDT
skyboy0720 2004-08-18
  • 打赏
  • 举报
回复
作业里调用
denghan 2004-08-18
  • 打赏
  • 举报
回复
搞定了。感谢zjcxc(邹建)邹大侠的指导。

34,576

社区成员

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

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