外部アプリケーションによって更新されるテーブルがあります。 トリガーを使用してSQL Serverの列を更新する
- OldReadDate
- MeterReading
- ReadDate
- MeterReading、ReadDateとConfirmReadingがアプリケーションによって更新され
をConfirmReading:私は、次の列があります。 ConfirmReadingは、MeterReadingが許容範囲外の場合にのみ更新されます。
は、私は次のことが起こる必要があります。MeterReadingとReadDateが表に更新され
1)は、OldReadingとOldReadDateは、同じテーブル内のこれらの値で更新する必要があります。
2)ただし、ConfirmReadingも更新されている場合は、 OldReadingは、代わりにこの値で更新する必要があります。
3)上記の方法でOldReadingとOldReadDateを更新した後、MeterReading、ConfirmReadingとReadDateをそれぞれ0、0、NULLに設定する必要があります。
これは私がこれまで持っているものです。
CREATE TRIGGER [dbo].[Set_Old_Streetlight_Readings_to_New] ON [dbo].[M_FRSCHH_STRLGHT_METER]
AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON
IF UPDATE(MeterReading) AND UPDATE(ConfirmReading)
BEGIN
UPDATE [dbo].[M_FRSCHH_STRLGHT_METER]
SET [OldReading] = [ConfirmReading], [OldReadDate] = [ReadDate]
WHERE ConfirmReading != 0
END
ELSE
IF UPDATE(MeterReading)
BEGIN
UPDATE [dbo].[M_FRSCHH_STRLGHT_METER]
SET OldReading = MeterReading, OldReadDate = ReadDate
WHERE ConfirmReading = 0
END
IF UPDATE(OldReading)
BEGIN
UPDATE [dbo].[M_FRSCHH_STRLGHT_METER]
SET MeterReading = 0, ConfirmReading = 0, ReadDate = NULL, ReadingPhoto = NULL, Reading_Flag = Null
WHERE MeterReading != 0
END
END
MeterReadingとの両方が更新を読む確認したときにそれは一種の作品だけでなく、場合MeterReadingアップデート。
TIA、
ジェイソン
コードはSQL Serverのように見えるので、私は、SQL Serverのタグを追加しました。 –
最初に、トリガはすべての行を更新します(WHEREを考慮に入れます)。更新された行だけでなく正しいですか? – Serg
次に、 'SET OldReading = ... IF UPDATE(OldReading)'は、DB上で許可されている場合、再帰をトリガするかもしれません。それが正しいか? – Serg