Итак, у меня есть эта таблица
CREATE TABLE [dbo].[DailyParkReport] (
[Id] INT IDENTITY (1, 1) NOT NULL,
[Date] DATE NOT NULL,
[InchesPrecipitation] FLOAT (53) NOT NULL,
[NumVisitors] INT NOT NULL,
[Rainout] BIT NOT NULL,
[Temperature] FLOAT (53) NOT NULL,
CONSTRAINT [PK_DailyParkReport] PRIMARY KEY CLUSTERED ([Id] ASC)
);
и я хочу установить триггер, если InchesPrecipitation
больше 4, то значение Rainout
1 означает true, а если InchesPrecipitation
<4, то значение Rainout равно 0. Все это должно обновить строку в той же таблице. </p>
Пока у меня есть триггер:
CREATE TRIGGER tr_weather_ForInsertUpdate
ON [dbo].[DailyParkReport]
FOR INSERT, UPDATE
AS
BEGIN
SET NOCOUNT ON
IF (Select InchesPrecipitation FROM INSERTED) > 4
UPDATE DailyParkReport
SET Rainout = 1
WHERE Rainout = 0
ELSE
UPDATE DailyParkReport
SET Rainout = 0
WHERE Rainout = 1
END
Проблема, с которой я сталкиваюсь, заключается в том, что всякий раз, когда запускается триггер, он обновляет каждую строку в таблице, и я хочу, чтобы он обновлял только эту конкретную строку.
Я устранил проблему, обновив мой триггер на следующий
CREATE TRIGGER tr_weather_ForInsertUpdate
ON [dbo].[DailyParkReport]
FOR INSERT, UPDATE
AS
BEGIN
SET NOCOUNT ON
IF (Select InchesPercipitation FROM INSERTED) > 4
UPDATE d SET Rainout = 1
FROM dbo.DailyParkReport AS d
WHERE EXISTS (SELECT 1 FROM inserted WHERE Id = d.Id)
ELSE
UPDATE d SET Rainout = 0
FROM dbo.DailyParkReport AS d
WHERE EXISTS (SELECT 1 FROM inserted WHERE Id = d.Id)
END