2011-07-19 7 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)FAILEDビットを入れて、これを行うことができますどのようにLastSuccDateTimeUpdate

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

を更新しませんか?

+2

何か試しましたか? – JNK

+0

私はSQL Serverが 'WasSuccessfull'の部分を把握するためのIF/THENのalertnativeとしてCASEを探しています。 IFまたはCASE datetimeが24時間以上経過している場合は、成功するために0を設定します。日時が24時間未満の場合は、成功のために1を入力します。論理をどうやって行うのかは分かりません。 – Alex

+0

現在の情報では解決できません。ルックアップテーブルに少なくとも1つの日付スタンプがありません.2つのレポートテーブルがあるようです。 2つのテーブルを説明し、いくつかのテストデータを入力して解決してください。また、テストデータのための望ましい出力を記述してください –

答えて

1

は、ここでケースを使用して、いくつかの擬似コードです:

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

あなたのOPにリストされているあなたのテーブル構造を終了した場合、私はより具体的にすることができます。私はLookupまたはMaintenanceレコードにReportingレコードをリンクする方法があると仮定しています...

+0

ありがとうJNK、それは関連テーブル構造です、私が追加する唯一のものは、ServerIDを報告テーブルに含めることです、残りの部分はわかります。 本質的には、ルックアップテーブルのアイテムごとにレポートテーブルに1つのエントリしかないので、私は「テーブルの更新」ステートメントが最適であると考えました。レコードが指定された時間内にメンテナンステーブルに存在しない場合(24時間前にこのコードが書き込まれているとします)、成功のために「0」を入れ、「最終更新日」を維持する必要があります。レコードが存在する場合は、1を入れて最後に更新された列を更新します。ハーフ!タイ – Alex

関連する問題