SQL: триггер установить столбец на ноль - PullRequest
0 голосов
/ 03 мая 2011

Я создал триггер для установки столбца на ноль, где столбец имеет значение больше GETDATE()

ALTER TRIGGER [dbo].[Null_Time_Trigger3]

  on [dbo].[Parking]
  FOR insert
  as
  update Parking
  set Column = NULL
  from Parking
  where Column >= CAST(GETDATE () AS TIME)

появляется, когда время проходит, триггер ничего не делает? время все еще находится в столбце, и столбец не имеет значения NULL.

Есть идеи, как решить эту проблему?

Есть ли в любом случае, чтобы сделать это (Setting the column to null) other than triggers???

С уважением.

Ответы [ 3 ]

3 голосов
/ 03 мая 2011

insert запускает только оператор вставки. Если нет операции insert, ваш триггер не будет работать.

Поскольку ваш триггер ссылается на саму таблицу Parking, а не на таблицу inserted, он может работать при вставке, но это совсем не то, для чего нужны триггеры.

В SQL Server нет временных триггеров, которые бы автоматически NULL определяли столбцы по истечении времени (как вы, вероятно, ожидаете).

Вместо этого вы можете сделать CASE WHEN Column < CAST(GETDATE () AS TIME) THEN Column END AS Column в вашем SELECT.

0 голосов
/ 03 мая 2011

Вы можете добавить вычисляемый столбец, что-то вроде этого:

CREATE TABLE
(
...
Column  DATETIME,
CurrentColumn  AS CASE WHEN DATETIME < SYSDATETIME() THEN DATETIME END
....
)

Однако, как правило, вы должны регистрировать события как новые записи, а не обновлять существующий столбец.Ваш текущий дизайн уничтожает информацию.

0 голосов
/ 03 мая 2011

Прежде всего, я думаю, что вы должны использовать <в своем определении триггера.В любом случае этот триггер срабатывает <strong>ТОЛЬКО , когда вы вставляете новую строку в БД, и действует ТОЛЬКО в этой строке, а не в предыдущих !!!
Вы можете сделать это одним запросом:

UPDATE Parking SET `Column`=NULL
WHERE `Column` < CAST(GETDATE () AS TIME)

РЕДАКТИРОВАНИЕ:

CREATE TRIGGER [dbo].[Null_Time_Trigger4]
on [dbo].[Parking]
FOR INSERT,UPDATE
AS BEGIN
    UPDATE Parking SET `Column`=NULL
    WHERE `Column` < CAST(GETDATE () AS TIME)
END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...