2011-07-19 41 views
0

我有1个表记录了每晚的服务器状态信息。我使用保存在另一个表中的企业中的每个服务器的列表引用该表,并针对该表运行查询,以检查过去几小时内该服务器名称的条目是否包含在Maint表中。这部分运作良好。根据记录条目是否存在来更新列

 
Lookup table: 
--------------- 
serverID 
serverName 
isActive 

Maintenance Table: 
-------------- 
ServerID 
ServerName 
LastAttemptedDateTimeStamp 

--This part is working fine. 

这是我想添加的功能。我想每天更新表格(覆盖所有旧信息)并为查找表中的每个条目记录一条记录。如果在最近24小时内在Maint表中存在查找表中的服务器条目,则在该行中放置SUCCESS位(1),更新LastAttemptedDateTime和LastSuccDateTimeUpdate。

如果该表中的条目不存在,然后把失败位(0),不更新LastSuccDateTimeUpdate

 
Reporting Table: 
---------------- 
-LastAttemptedDateTime 
-LastSuccDateTimeUpdate 
-WasSuccessfull (bit) 0 or 1 

如何才能做到这一点?

+2

您尝试过任何操作吗? – JNK

+0

我正在查找CASE作为IF/THEN的警告,以便SQL Server找出'WasSuccessfull'部分。 IF或CASE日期时间超过24小时,然后将成功为0。如果日期时间不足24小时,则为1成功。不太清楚如何去做逻辑。 – Alex

+0

无法用当前信息解决。我们缺少列(查找表中至少有一个datestamp),并且有两个报表。描述这两个表格,填入一些测试数据,以便我们有机会解决它。还要描述测试数据的期望输出 –

回答

1

下面是一些伪代码使用情况:

Update ReportingTable R 
SET Col1 = SomeValue, 
    Col2 = SomeOtherValue, 
    WasSuccesful = CASE 
        WHEN EXISTS (SELECT 1 FROM LookupTable WHERE ...) THEN 1 
        ELSE 0 
        END 

如果你完成你的表结构在OP我可以更具体上市。我假设有一种方法可以将Reporting记录链接到LookupMaintenance记录...

+0

感谢JNK,这是相关的表结构,我唯一要添加的就是在报表中包含ServerID,剩下的我可以弄清楚。 所以基本上,我们在查询表中每个项目在报表中只有1个条目,所以我认为'update table'语句是最好的。如果在指定的时间内维护表中不存在记录(24小时,比如说,我已经写了这段代码),那么我需要将“0”设为成功,并保持“最后更新”日期。如果记录确实存在,则输入1并更新最后更新的列。 HALP! TY – Alex

相关问题