有两个表,假如分别server,server_Log日志表,其中server是各服务器的状态记录。每三分钟会更新这些记录,并将这些更新记录跟server_log日志表里的最后一次添加的记录进行比较,如果相差一个小时就进行添加。请教这个触发器要如何写。表结构如下
server 表结构
servername[名称] ip[ip] onlinenum[在线人数] totalbandwidth[总量] cpuuse[占用率] modtime[修改时间] server_Log表结构
serverlogid[主键自增1] servername[名称] ip[ip] onlinenum[在线人数] totalbandwidth[总量] cpuuse[占用率] appendtime[添加时间] 如下是我在server中写的触发器。有误。请高手帮我修正。
CREATE TRIGGER [InsertServerLog] ON [dbo].[server]
FOR UPDATE
AS
declare @lastmodtime varchar(50)
BEGIN
select @lastmodtime=appendtime from server_Log order by appendtime desc
INSERT INTO server_Log
SELECT servername,ip,onlinenum,totalbandwidth,cpuuse,modtime FROM server where DATEDIFF(HOUR,@lastmodtime,getdate())=1
END
server 表结构
servername[名称] ip[ip] onlinenum[在线人数] totalbandwidth[总量] cpuuse[占用率] modtime[修改时间] server_Log表结构
serverlogid[主键自增1] servername[名称] ip[ip] onlinenum[在线人数] totalbandwidth[总量] cpuuse[占用率] appendtime[添加时间] 如下是我在server中写的触发器。有误。请高手帮我修正。
CREATE TRIGGER [InsertServerLog] ON [dbo].[server]
FOR UPDATE
AS
declare @lastmodtime varchar(50)
BEGIN
select @lastmodtime=appendtime from server_Log order by appendtime desc
INSERT INTO server_Log
SELECT servername,ip,onlinenum,totalbandwidth,cpuuse,modtime FROM server where DATEDIFF(HOUR,@lastmodtime,getdate())=1
END
解决方案 »
- 这个故事告诉我们,什么叫神奇
- sql server 2000 导出到其它电脑的 sql server 2000 中主键丢失怎么办?
- 有没有办法把MSSQL的企业管理器的所有配置全部导出来?
- 有没有常见的数据库表
- 触发器如何使用呢?也就是说在VB代码中的什么位置调用触发器呢,请举例
- 请大家来讨论一下如何权衡在表中设自增列. 在哪些情况下可用可不用
- 关于MSDE的小问题
- Sql server2005里无法将字符串类型转化为datetime类型
- 导出数据时,为什么视图没有一起导出?
- 日志文件已满如何备份删除?
- 请问rollback transaction是什么意思?
- XP专业版下如何建立数据库?如何建表?
改为:
select top 1 /*加上top 1*/
@lastmodtime=appendtime from server_Log order by appendtime desc
加个top 1不能实现。:)
FOR UPDATE
AS
declare @lastmodtime datetime
BEGIN
select top 1 @lastmodtime=appendtime from server_Log order by appendtime desc
INSERT INTO server_Log(servername,ip,onlinenum,totalbandwidth,cpuuse,appendtime)
SELECT servername,ip,onlinenum,totalbandwidth,cpuuse,modtime FROM inserted
where DATEDIFF(HOUR,@lastmodtime,modtime)=1
END
select @lastmodtime=appendtime from server_Log order by appendtime desc
得到的其实是最小值,因为楼主的代码会扫描server_Log表的所有行后取最后一行,不但取的值与预求南辕北辙,而且扫描了整个表,效率被浪费了.
而
select top 1 @lastmodtime=appendtime from server_Log order by appendtime desc
则取的是server_Log表中的最大日期,即按日期由大到小的排序中取第一行.