SQL: проверьте, превышает ли столбец времени системное время

#asp.net #sql #sql-server #tsql

#asp.net #sql #sql-сервер #tsql

Вопрос:

Я хотел бы знать, как проверить, превышает ли временная метка в (столбец startTime) системное время. Если больше, то следует сбросить временную метку на NULL

Есть ли способ сделать это?

С уважением.

Комментарии:

1. Вы используете MySQL или SQLServer? Вы хотите, чтобы это было частью запроса или процедуры? Все это есть в ваших тегах.

2. Я использую SQLServer. И я не уверен, какой вариант является наилучшим. Но он (запрос или процедура) должен запускаться каждый раз, когда вставляется запись.

3. Возможно, вы захотите изучить триггеры, триггер BEFORE INSERT…

Ответ №1:

В MySQL вы могли бы попробовать:

 UPDATE table SET time = NULL
WHERE time>NOW()
  

Если вы хотите, чтобы это было автоматически, попробуйте это:

 CREATE TRIGGER upd BEFORE INSERT ON `table` 
FOR EACH ROW BEGIN 
    IF NEW.time>NOW() THEN SET NEW.time=NULL; END IF; 
END;
  

Ответ №2:

 update table set ts_field = null where ts_field > now()
  

это для mysql

Ответ №3:

 Declare @Now datetime = GETDATE()

Update tbl Set
    StartTime=NULL
Where StartTime > @Now
  

Комментарии:

1. как я могу заставить это выполняться каждый раз, когда вставляется запись

Ответ №4:

   create trigger tbl_reset_date
  on tbl
  after insert
  as

  update t
  set time = null
  from tbl t
   join inserted i
     on i.id = t.id
  where i.time > getdate();
  

Комментарии:

1. Слишком много Pascal / Delphi (или где еще вы используете nil )? 🙂

2. что вы подразумеваете под этим на i.id = t.id Имя моей таблицы — Product, а имя столбца, в котором указано время, называется Ptime. не могли бы вы соответствующим образом отредактировать код, я немного запутался. С уважением

3. Просто замените id на любой первичный ключ таблицы. Может быть, product_id?

Ответ №5:

Попробуйте…

 CREATE TRIGGER tr_Product_InsteadOfTrigger 
ON Product
INSTEAD OF INSERT
AS

  IF @@ROWCOUNT > 0 -- limit nested recursion if no work to do
  BEGIN

    SET NOCOUNT ON;

    INSERT INTO Product
    (
      ProductId,
      PTime 
    )
    SELECT 
      i.ProductId, 
      CASE 
        WHEN i.PTime > GETUTCDATE() 
        THEN NULL 
        ELSE i.PTime 
      END
    FROM 
      inserted i

  END -- if work to do

GO